Как передать переменную в качестве параметра в Execute SQL Task SSIS?
Привет, у меня есть пакет ssis, в котором я беру значения из плоского файла и вставляю его в таблицу.
Я взял одну задачу Execute SQL Task, создав одну соблазнительную
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 параметра с использованием имени переменной Я создал переменные в пакете, чтобы я стал динамическим. пожалуйста, помогите
Ответы
Ответ 1
В вашей Execute SQL Task убедитесь, что для SQLSourceType установлено значение Direct Input, тогда ваше SQL-выражение является именем хранимой процедуры, с вопросительными знаками для каждого параметра proc, например:
![enter image description here]()
Выберите сопоставление параметров в левом столбце и добавьте каждый параметр из сохраненного proc и сопоставьте его с вашей переменной SSIS:
![enter image description here]()
Теперь, когда эта задача выполняется, она передаст переменные SSIS в сохраненный proc.
Ответ 2
Менеджеры соединений EXCEL и OLED DB используют имена параметров 0 и 1.
Я использовал соединение oledb и потратил пару часов, пытаясь выяснить причину, по которой запрос не работал или принимал параметры. приведенное выше объяснение помогло
Большое спасибо.
Ответ 3
Команды 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.
Ответ 4
Немного поздно для вечеринки, но вот как я сделал это для вставки:
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...
Ответ 5
Наряду с ответом @PaulStock, в зависимости от типа подключения, имена переменных и SQLStatement/SQLStatementSource Changes
https://docs.microsoft.com/en-us/sql/integration-services/control-flow/execute-sql-task
![https://docs.microsoft.com/en-us/sql/integration-services/control- поток/выполнение-SQL-задачи]()