Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Проблема с varchar(max)  [new]
mikka sikorsky
Member

Откуда:
Сообщений: 53
Приветствую.
Столкнулся с такой проблемой.
Есть 2 SQL-сервера 2014, абсолютно одинаковые, тот же collation и т.д.
С каждого из этих SQL-серверов выполняется запрос к Orcale linked-серверу:
declare @p_numer varchar(max) = N'871525'
exec ('select * from table(PKG_DC_LOAD.F_GET_ICREP_TAB(?))', @p_numer) at DWH2
При этом на одном из SQL-серверов запрос возвращает одну строку, а на другом - пусто.
Вот, на том, где возвращается пустой набор данных, попробовал varchar(8000) вместо varchar(max) и сработало.
Т.е. возникает подозрение, что чем-то, всё-таки, эти SQL-сервера отличаются друг от друга.
Хотелось бы, чтобы varchar(max) работал и на другом сервере, т.к. иначе придется переписывать довольно много исходников.
Посоветуйте, где что нудно настроить? Заранее благодарен за конструктивные ответы.
21 апр 16, 13:52    [19088243]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с varchar(max)  [new]
Glory
Member

Откуда:
Сообщений: 104760
mikka sikorsky
При этом на одном из SQL-серверов запрос возвращает одну строку, а на другом - пусто.

И вы уже посмотрели, что попадает в Orcale в обеих случаях ?

mikka sikorsky
declare @p_numer varchar(max) = N'871525'

Зачем для хранения числа выбран тип varchar(max) ?
Зачем в неюникодовский varchar(max) заносится юникодовая строка ?
21 апр 16, 13:58    [19088309]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с varchar(max)  [new]
mikka sikorsky
Member

Откуда:
Сообщений: 53
На стороне Oracle нет доступа, чтобы посмотреть.
Профайлером под ms sql вижу, что отправляется то, что написано в sql management studio.
Для хранения выбрано varchar(max) - тяжёлое наследие, которое нельзя сейчас исправить.
Задача состоит в том, чтобы всё заработало на втором sql-сервере, не меняя типов в базе SQL.
У меня подозрение на настройку ODAC, которые используются в linked server на sql.
25 апр 16, 10:18    [19101493]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с varchar(max)  [new]
Glory
Member

Откуда:
Сообщений: 104760
mikka sikorsky
На стороне Oracle нет доступа, чтобы посмотреть.

И кто тогда подтвердит, что на Оракле выполняется один и тот же запрос

mikka sikorsky
Профайлером под ms sql вижу, что отправляется то, что написано в sql management studio.

В профайлере вы не можете видеть то, что отправляется на Оракл.
В профайлере вы видите то, что получает MSSQL.

mikka sikorsky
Задача состоит в том, чтобы всё заработало на втором sql-сервере, не меняя типов в базе SQL.

А в Oracle есть тип данных varchar(max) ?
И так и непонятно, зачем для хранения числа выбран символьный тип данных, да еще varchar(max)
25 апр 16, 10:22    [19101510]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с varchar(max)  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
mikka sikorsky
На стороне Oracle нет доступа, чтобы посмотреть.
Профайлером под ms sql вижу, что отправляется то, что написано в sql management studio.
Для хранения выбрано varchar(max) - тяжёлое наследие, которое нельзя сейчас исправить.
Задача состоит в том, чтобы всё заработало на втором sql-сервере, не меняя типов в базе SQL.
У меня подозрение на настройку ODAC, которые используются в linked server на sql.
Если varchar, то N уберите!
25 апр 16, 10:22    [19101511]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с varchar(max)  [new]
mikka sikorsky
Member

Откуда:
Сообщений: 53
В Orcale есть varchar2.
Что с N, что без N - одинаково
25 апр 16, 10:39    [19101607]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с varchar(max)  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
mikka sikorsky
В Orcale есть varchar2.
Что с N, что без N - одинаково
Если вы всё знаете, то в чём проблема?
25 апр 16, 10:40    [19101613]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с varchar(max)  [new]
Glory
Member

Откуда:
Сообщений: 104760
mikka sikorsky
В Orcale есть varchar2.

Хороший ответ. Типа - я все сделал правильно, а MSSQL не может павильно строчки передать
25 апр 16, 10:45    [19101643]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с varchar(max)  [new]
mikka sikorsky
Member

Откуда:
Сообщений: 53
Есть входные данные и есть условия для решения задачи.
Я вопрос задал, т.к. есть проблема и не могу её решить.
25 апр 16, 10:47    [19101653]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с varchar(max)  [new]
Glory
Member

Откуда:
Сообщений: 104760
mikka sikorsky
Есть входные данные и есть условия для решения задачи.
Я вопрос задал, т.к. есть проблема и не могу её решить.

Вы не можете ее решит потому, что не знаете, где и что происходит.
Для начала вы даже не знаете, одинаковые ли запросы выполняет Оракл.
25 апр 16, 10:49    [19101671]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с varchar(max)  [new]
flexgen
Member

Откуда: Город на песке
Сообщений: 782
Я бы еще убедился что алиас DWH2 указывает на одну и ту же базу Oracle.
25 апр 16, 11:06    [19101771]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с varchar(max)  [new]
mikka sikorsky
Member

Откуда:
Сообщений: 53
Договорился с админами, включили трассировку.
Получил от них ответ:
"Ноль строк возвращается, если передать на вход этой процедуры NULL.
select * from table(PKG_DC_LOAD.F_GET_ICREP_TAB(NULL))
В трассировках в одной из сессий вижу передаваемый бинд, а в другом – нет (видимо пришел NULL)"
25 апр 16, 14:31    [19103304]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить