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

Откуда: Украина, Львов
Сообщений: 31
Доброго времени суток всем.
Столкнулся с проблемой: необходимо на основе результатов запроса сгенерировать другой запрос в переменную и использовать её в OLE DB source.
Например: считаем максимальное значение SELECT MAX([code])
FROm [computer].[dbo].[Laptop]
и результат заносим в стринговую переменную. Дальше в скрипт таске формирую результуриующий запрос
string a;

a = @"SELECT code
,model
,speed
,ram
,hd
,price
,screen
FROM computer.dbo.Laptop
WHERE code = " + Dts.Variables["var"].Value.ToString() ;

Dts.Variables["sql"].Value = a;

Когда в OLEDB source подсталяю переменную с запросом выше получаю пачку ошибок:
[OLE DB Source [33]] Error: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80040E14.
An OLE DB record is available. Source: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80040E14 Description: "Statement(s) could not be prepared.".
Так же установил delay validation = true и validate external metadata = false.

Прошу помощи кто с таким сталкивался.
Заранее спасибо
12 авг 15, 22:12    [18010569]     Ответить | Цитировать Сообщить модератору
 Re: Динамически формируемый запрос не работает SSIS  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
edtc,

А зачем вам динамический запрос ради одного параметра? У вас же не имя таблицы меняется, а всего лишь значение. Используйте параметры в OLEDB source.

Ну и даже если очень захотелось что-то посклеивать, никогда не понимал зачем для этого нужен Script, когда тоже самое можно сделать через variable expression.
12 авг 15, 22:30    [18010651]     Ответить | Цитировать Сообщить модератору
 Re: Динамически формируемый запрос не работает SSIS  [new]
edtc
Member

Откуда: Украина, Львов
Сообщений: 31
К стати забыл упомянуть: просто парамеризировать OLEBD одним значением не получается в моём случае так как результирующий запрос может иметь от 1 записи до 40(может и больше)
Если кто-то подскажет как параметризизовать OLE BD под запрос типа
SELECT * FROM table where col IN (?) буду благодарен
12 авг 15, 22:32    [18010659]     Ответить | Цитировать Сообщить модератору
 Re: Динамически формируемый запрос не работает SSIS  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
edtc,

Ну и вдобавок. Вы видели что у вас в переменной "a" получается после присвоения? Пытались это выполнить в SSMS?
12 авг 15, 22:32    [18010661]     Ответить | Цитировать Сообщить модератору
 Re: Динамически формируемый запрос не работает SSIS  [new]
edtc
Member

Откуда: Украина, Львов
Сообщений: 31
Mind,
спасибо за подсказку. Попробую через expression. Он всё-такие роднее скрипт компонента
12 авг 15, 22:34    [18010668]     Ответить | Цитировать Сообщить модератору
 Re: Динамически формируемый запрос не работает SSIS  [new]
edtc
Member

Откуда: Украина, Львов
Сообщений: 31
Mind,
конечно видел SELECT [code]
,[model]
,[speed]
,[ram]
,[hd]
,[price]
,[screen]
FROM [computer].[dbo].[Laptop]
WHERE [code] = 6

работает :(
12 авг 15, 22:35    [18010675]     Ответить | Цитировать Сообщить модератору
 Re: Динамически формируемый запрос не работает SSIS  [new]
edtc
Member

Откуда: Украина, Львов
Сообщений: 31
Mind
edtc,

А зачем вам динамический запрос ради одного параметра? У вас же не имя таблицы меняется, а всего лишь значение. Используйте параметры в OLEDB source.

Ну и даже если очень захотелось что-то посклеивать, никогда не понимал зачем для этого нужен Script, когда тоже самое можно сделать через variable expression.

Пробовал :( к нечсатью запрос в виде строки получается адекватный
SELECT [code]
,[model]
,[speed]
,[ram]
,[hd]
,[price]
,[screen]
FROM [computer].[dbo].[Laptop]
WHERE [code] = 6

но вот почему его не хавает OLEDB.... Это загадка.
12 авг 15, 22:42    [18010691]     Ответить | Цитировать Сообщить модератору
 Re: Динамически формируемый запрос не работает SSIS  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4902
edtc,

Поставьте BypassPrepare = True

Картинка с другого сайта.
13 авг 15, 10:57    [18011816]     Ответить | Цитировать Сообщить модератору
 Re: Динамически формируемый запрос не работает SSIS  [new]
edtc
Member

Откуда: Украина, Львов
Сообщений: 31
a_voronin,
Спасибо за совет, однако в переменную данные загоняются без проблем.
Проблема возникает со второй переменной, которая используется в OLEBD
13 авг 15, 18:51    [18014882]     Ответить | Цитировать Сообщить модератору
 Re: Динамически формируемый запрос не работает SSIS  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4902
edtc,

А почему не вот так ?

SELECT [code]
,[model]
,[speed]
,[ram]
,[hd]
,[price]
,[screen]
FROM [computer].[dbo].[Laptop]
WHERE [code] = ?


http://stackoverflow.com/questions/7610491/how-to-pass-variable-as-a-parameter-in-execute-sql-task-ssis
Картинка с другого сайта.

Картинка с другого сайта.
13 авг 15, 19:14    [18014975]     Ответить | Цитировать Сообщить модератору
 Re: Динамически формируемый запрос не работает SSIS  [new]
edtc
Member

Откуда: Украина, Львов
Сообщений: 31
a_voronin,
ОГРОМНОЕ СПАСИБО. Немного не то что я представлял изначально, но это часть решения моей задачи
13 авг 15, 22:00    [18015442]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить