如何在变量SQL任务SSIS中将变量作为参数传递?

时间:2011-09-30 12:40:30

标签: sql ssis

我有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

现在在上面的查询中,我需要传递(Date = '2011-09-30') AND (PortfolioId = 5) AND (stype in ('Index')) 这三个参数使用变量名称我在包中创建了变量,这样我就变得动态了。

5 个答案:

答案 0 :(得分:86)

在执行SQL任务中,确保将SQLSourceType设置为直接输入,然后您的SQL语句是存储过程的名称,其中包含proc的每个参数的问号,如下所示:

enter image description here

单击左列中的参数映射并添加存储过程中的每个参数并将其映射到SSIS变量:

enter image description here

现在,当此任务运行时,它会将SSIS变量传递给存储过程。

答案 1 :(得分:18)

EXCEL和OLED数据库连接管理器使用参数名称0和1.

我正在使用oledb连接并浪费了几个小时试图弄清楚查询无效的原因或采用参数。上面的解释帮了很多忙 非常感谢。

答案 2 :(得分:6)

除了@ 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

答案 3 :(得分:4)

SELECTINSERTUPDATEDELETE命令经常包含WHERE子句,用于指定过滤器,这些过滤器定义源表中每行必须符合的条件才能符合条件一个SQL命令。参数提供WHERE子句中的过滤器值。

您可以使用参数标记动态提供参数值。可以在SQL语句中使用参数标记和参数名称的规则取决于执行SQL使用的连接管理器的类型。

下表列出了连接管理器类型的SELECT命令示例。 INSERT,UPDATE和DELETE语句类似。这些示例使用SELECT从AdventureWorks2012中的Product表返回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 :(得分:2)

派对有点晚了,但这就是我为插入做的方式:

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...