SSIS: передача параметра в редакторе исходного кода OLE DB в табличную функцию - PullRequest
2 голосов
/ 15 апреля 2010

Как передать параметры в OLE DB Source для вызова табличной функции, например:

выберите * из [dbo]. [Udf_test] (?,?)

При этом я получаю сообщение об ошибке:

Невозможно извлечь параметры из команды SQL. Поставщик может не помочь разобрать информацию о параметрах из команды. В этом случае используйте режим доступа «переменная формы команды SQL», в котором вся команда SQL хранится в переменной. Синтаксическая ошибка, нарушение прав доступа или другая неспецифическая ошибка (собственный клиент Microsoft SQL)

Есть ли другое решение, кроме «SQL-команда из переменной»?

Sven

Ответы [ 2 ]

3 голосов
/ 15 апреля 2010

Вы можете использовать команду SQL из переменной, это относительно просто. Вы можете создать инструкцию SQL для передачи в Source, используя преобразование Script для редактирования переменной, содержащей SQL. Так, например, вы должны установить переменную с именем strSQL и сделать значение

select * from [dbo].[udf_test](?1, ?2)

А затем в компоненте сценария замените значения? 1 и? 2 параметрами, которые вы хотите передать, используя методы работы со строками.

В пакете немного больше работы, но по моему опыту хорошо работает.

0 голосов
/ 19 сентября 2016

Это немного обходной путь, но он работает довольно хорошо. Мы создаем хранимую процедуру SetVar, которая будет принимать входной параметр и назначать его объявленному выходному параметру.

Создайте процедуру с именем SetVar в исходной базе данных OLE DB. Он присваивает @inputVar @ outVar

CREATE PROC SetVarInt
    @inputVar INT ,
    @outVar INT OUTPUT
AS
BEGIN
    SELECT @outVar = @inputVar;
END

В источнике OLE DB службы SSIS используйте этот SQL:

DECLARE @param1 INT;

EXEC [dbo].[SetVarInt] @inputVar = ?, -- int
    @outVar = @param1 OUTPUT -- int

SELECT * FROM [dbo].[GetByKey](@param1)

Если ничего не происходит, оптимизатор мог оптимизировать задачу (проверьте журнал выполнения пакета). В этом случае я добавлю следующее в конец исходного кода OLE DB и подключу этот вывод к задаче RowCount в фиктивную переменную.

SELECT 1 Done;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...