我有ssis包,因为我从平面文件中获取值并将其插入表中.
我在创建一个temptable时采用了一个执行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
Run Code Online (Sandbox Code Playgroud)
现在在上面的查询中我需要(Date = '2011-09-30') AND (PortfolioId = 5) AND (stype in ('Index'))
使用变量名传递这3个参数我已经在包中创建了变量,这样我就变得动态了.
Pau*_*ock 92
在您的执行SQL任务中,确保将SQLSourceType设置为直接输入,然后您的SQL语句是存储过程的名称,其中包含proc的每个参数的问号,如下所示:
单击左列中的参数映射并添加存储过程中的每个参数并将其映射到SSIS变量:
现在,当此任务运行时,它会将SSIS变量传递给存储过程.
小智 18
EXCEL和OLED DB连接管理器使用参数名称0和1.
我正在使用oledb连接并浪费了几个小时试图弄清楚查询无效或参数的原因.上面的解释很有帮助.非常感谢.
随着@ PaulStock的回答,根据您的连接类型,您的变量名称和SQLStatement/SQLStatementSource更改
https://docs.microsoft.com/en-us/sql/integration-services/control-flow/execute-sql-task
SELECT
,INSERT
,UPDATE
,和DELETE
命令通常包括WHERE子句指定定义的条件的过滤器中的源表的每一行必须满足有资格获得SQL命令。参数在WHERE子句中提供过滤器值。
您可以使用参数标记来动态提供参数值。在SQL语句中可以使用参数标记和参数名称的规则取决于Execute SQL使用的连接管理器的类型。
下表按连接管理器类型列出了SELECT命令的示例。INSERT,UPDATE和DELETE语句相似。这些示例使用SELECT从AdventureWorks2012中的Product表中返回ProductID大于和小于两个参数指定的值的产品。
EXCEL,ODBC和OLEDB
SELECT* FROM Production.Product WHERE ProductId > ? AND ProductID < ?
Run Code Online (Sandbox Code Playgroud)
阿多
SELECT * FROM Production.Product WHERE ProductId > ? AND ProductID < ?
Run Code Online (Sandbox Code Playgroud)
ADO.NET
SELECT* FROM Production.Product WHERE ProductId > @parmMinProductID
AND ProductID < @parmMaxProductID
Run Code Online (Sandbox Code Playgroud)
这些示例将需要具有以下名称的参数:EXCEL和OLED DB连接管理器使用参数名称0和1。ODBC连接类型使用1和2。ADO连接类型可以使用任何两个参数名称,例如Param1和。 Param2,但参数必须按其在参数列表中的顺序位置进行映射。ADO.NET连接类型使用参数名称@parmMinProductID和@parmMaxProductID。
小智 5
聚会有点晚了,但这就是我插入的方式:
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...
Run Code Online (Sandbox Code Playgroud)