Как передать переменную в качестве параметра в SSIS «Выполнение задачи SQL»? - PullRequest
46 голосов
/ 30 сентября 2011

У меня есть пакет ssis, в котором я беру значения из простого файла и вставляю его в таблицу.

Я выполнил одну задачу «Выполнение SQL» при создании одной временной переменной

CREATE TABLE [tempdb].dbo.##temptable 
(
date datetime,
companyname nvarchar(50),
price decimal(10,0),
PortfolioId int,
stype nvarchar(50)
)

Insert into [tempdb].dbo.##temptable (date,companyname,price,PortfolioId,stype) 
SELECT   date,companyname,price,PortfolioId,stype
FROM        ProgressNAV
WHERE     (Date = '2011-09-30') AND (PortfolioId = 5) AND (stype in ('Index'))
ORDER BY CompanyName

Теперь в приведенном выше запросе мне нужно передать (Date = '2011-09-30') AND (PortfolioId = 5) AND (stype in ('Index')) эти 3 параметра, используя имя переменной, я создал переменные в пакете, чтобы я стал динамическим.

Ответы [ 5 ]

89 голосов
/ 30 сентября 2011

В вашей задаче «Выполнение SQL» убедитесь, что для параметра «SQLSourceType» задано значение «Прямой ввод», тогда ваш оператор SQL - это имя хранимого процесса, с вопросительными знаками для каждого параметра процесса, например:

enter image description here

Нажмите на сопоставление параметров в левом столбце и добавьте каждый параметр из вашего сохраненного процесса и сопоставьте его с вашей переменной SSIS:

enter image description here

Теперь, когда эта задачазапускает его, передает переменные SSIS хранимому процессу.

18 голосов
/ 22 октября 2013

Менеджеры соединений EXCEL и OLED DB используют имена параметров 0 и 1.

Я использовал соединение с oledb и потратил пару часов, пытаясь выяснить причину, по которой запросне работал или не принимал параметры.Вышеприведенное объяснение очень помогло. Большое спасибо.

7 голосов
/ 14 октября 2017

Вместе с ответом @ PaulStock, в зависимости от типа вашего подключения, имен ваших переменных и изменений SQLStatement / SQLStatementSource

https://docs.microsoft.com/en-us/sql/integration-services/control-flow/execute-sql-task https://docs.microsoft.com/en-us/sql/integration-services/control-flow/execute-sql-task

4 голосов
/ 24 июля 2013
Команды

SELECT, INSERT, UPDATE и DELETE часто включают в себя предложения WHERE для определения фильтров, которые определяют условия, которым должна соответствовать каждая строка в исходных таблицах, чтобы соответствовать требованиям команды SQL.Параметры обеспечивают значения фильтра в предложениях WHERE.

Вы можете использовать маркеры параметров для динамического предоставления значений параметров.Правила, для которых маркеры параметров и имена параметров могут использоваться в операторе SQL, зависят от типа диспетчера соединений, который использует Execute SQL.

В следующей таблице приведены примеры команды SELECT по типу диспетчера соединений.Операторы INSERT, UPDATE и DELETE похожи.В примерах используется SELECT для возврата продуктов из таблицы Product в AdventureWorks2012, у которых ProductID больше и меньше значений, указанных двумя параметрами.

EXCEL, ODBC и OLEDB

SELECT* FROM Production.Product WHERE ProductId > ? AND ProductID < ?

ADO

SELECT * FROM Production.Product WHERE ProductId > ? AND ProductID < ?

ADO.NET

SELECT* FROM Production.Product WHERE ProductId > @parmMinProductID 
     AND ProductID < @parmMaxProductID

В примерах могут потребоваться параметры со следующими именами: Менеджеры соединений EXCEL и OLED DB используют имена параметров 0 и 1. Тип соединения ODBC использует 1 и 2. Тип соединения ADO может использовать любые два имени параметров, таких как Param1 и Param2, но параметры должны отображаться ихПорядковый номер в списке параметров.Тип подключения ADO.NET использует имена параметров @parmMinProductID и @ parmMaxProductID.

2 голосов
/ 23 января 2015

Немного опоздал на вечеринку, но вот как я это сделал для вставки:

DECLARE @ManagerID AS Varchar (25) = 'NA'
DECLARE @ManagerEmail AS Varchar (50) = 'NA'
Declare @RecordCount AS int = 0

SET @ManagerID = ?
SET @ManagerEmail = ?
SET @RecordCount = ?

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