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

Откуда: большая деревня
Сообщений: 266
Прилинковал базу MySQL (Elastix_28) к MS SQL (Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0)

Выполняю запрос:

declare @sql_string4 varchar(4000);
set @sql_string4 = 'select id, name FROM call_center.campaign where name in (''KosOctober_191112'',''OK20'')';
select @sql_string4
EXEC (@sql_string4) AT [Elastix_28];

Выдает две строки, как и должно быть.

id name
118OK20
119KosOctober_191112


Меняю условие в блоке in на параметр:
declare @param varchar(4000);
set @param = '''''KosOctober_191112'''',''''OK20''''';
select @param

declare @sql_string varchar(4000);
set @sql_string = 'select id, name FROM call_center.campaign where name in (?)';

EXEC (@sql_string, @param) AT [Elastix_28];


получаю пустую таблицу, параметр сформирован правильно(''KosOctober_191112'',''OK20''):

id name


В чем ошибка?
25 янв 13, 12:18    [13826728]     Ответить | Цитировать Сообщить модератору
 Re: exec на линкованном сервере  [new]
Glory
Member

Откуда:
Сообщений: 104751
virtuOS
параметр сформирован правильно(''KosOctober_191112'',''OK20''):

Это вы так думаете или вы мониторили комнады, которые приходят на MySQL ?
По-моему, значение будет '''''KosOctober_191112'''',''''OK20''''', т.е. одна строка, а не несколько, разделенных запятыми
25 янв 13, 12:24    [13826775]     Ответить | Цитировать Сообщить модератору
 Re: exec на линкованном сервере  [new]
virtuOS
Member

Откуда: большая деревня
Сообщений: 266
Мне и нужна одна строка в параметре, т.к. число параметров заранее неизвестно.

Или есть способ передать табличный параметр? Сервер то mySQL...

причина такого подхода в том, что мне надо сделать отчеты в SSRS, в качестве источника данных выступает MySQL. ODBC поставил, но через опенквери нельзя передавать параметры, задаваемые пользователем в отчете. Поэтому хочу динамически формировать строку, которую и выполняю через exec на линкованном сервере. В условие in хочу подставлять multi-value параметр из SSRS, преобразованный в строку.
25 янв 13, 12:34    [13826851]     Ответить | Цитировать Сообщить модератору
 Re: exec на линкованном сервере  [new]
Glory
Member

Откуда:
Сообщений: 104751
virtuOS
Мне и нужна одна строка в параметре, т.к. число параметров заранее неизвестно

Вы разницу понимаете между
in('1', '2') и
in("'1', '2'")
25 янв 13, 12:41    [13826889]     Ответить | Цитировать Сообщить модератору
 Re: exec на линкованном сервере  [new]
virtuOS
Member

Откуда: большая деревня
Сообщений: 266
Такой запрос тоже не проходит, выдает пустой результирующий набор:

declare @param varchar(4000);
set @param = '''KosOctober_191112'',''OK20''';
select @param

declare @sql_string varchar(4000);
set @sql_string = 'select id, name FROM call_center.campaign where name in (?)';

EXEC (@sql_string, @param) AT [Elastix_28];
25 янв 13, 12:49    [13826947]     Ответить | Цитировать Сообщить модератору
 Re: exec на линкованном сервере  [new]
Glory
Member

Откуда:
Сообщений: 104751
virtuOS
акой запрос тоже не проходит, выдает пустой результирующий набор:

Потому что вы путаете параметризацию с макроподстановкой.
25 янв 13, 12:50    [13826950]     Ответить | Цитировать Сообщить модератору
 Re: exec на линкованном сервере  [new]
virtuOS
Member

Откуда: большая деревня
Сообщений: 266
Т.е. через параметр сделать невозможно?
25 янв 13, 12:53    [13826971]     Ответить | Цитировать Сообщить модератору
 Re: exec на линкованном сервере  [new]
Glory
Member

Откуда:
Сообщений: 104751
virtuOS
Т.е. через параметр сделать невозможно?

Именно через параметер - нет
Собрать полный текст запроса - можно.
25 янв 13, 12:57    [13827005]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить