我的SSIS软件包包括一个T-SQL任务。我有一个要传递给我的T-SQL任务的包参数,但是我找不到正确的语法来做到这一点:
DECLARE @myVariable int;
SET @myVariable = $Package::myParameter --not working
SET @myVariable = @[$Package::myParameter] -- also not working
将参数传递给T-SQL任务的正确方法是什么?
答案 0 :(得分:3)
我建议使用Execute SQL Task,因为它比Execute T-SQL Statement任务提供更多功能。但是,如果您希望将T-SQL任务与参数一起使用,则可以通过创建带有包含该参数的表达式的字符串变量来完成。下面是一个示例。要将其设置为T-SQL任务的语句,请转到任务的“属性”窗口(按F4
),单击“ Expressions
”字段旁边的省略号,然后选择“ SqlStatementSource
”。属性,然后将包含T-SQL的字符串变量添加为Expression
。由于SQL中的变量是INT数据类型,因此我假设package参数也是,因此需要将其强制转换为字符串,以作为表达式的一部分包含在字符串变量中。仍将其解析为数字数据类型,并按原样提交给SQL Server。此转换使用下面的(DT_STR, length, code page)
函数完成。这仅使用示例长度10。作为一个旁注,(DT_WSTR, length)
函数将用于Unicode数据。确保将SQL文本括在引号中,如下所示。另外请注意,参数名称在表达式中区分大小写,例如,如果参数名称为@[$Package::MyParameter]
,则@[$Package::myParameter]
会返回错误,从小写的m开始。
"DECLARE @myVariable INT;
SET @myVariable = " + (DT_STR, 10, 1252)@[$Package::myParameter] + "
UPDATE Database.Schema.Table
SET NAME = 'TW'
WHERE ID = @myVariable"
答案 1 :(得分:1)
您不能将参数传递给T-SQL任务。
如果需要运行参数化查询,请将查询结果保存到 变量或使用属性表达式,则应使用Execute SQL 任务而不是执行T-SQL语句任务。欲了解更多 信息,请参阅执行SQL任务。