在SSIS中将动态T-SQL输入到T-SQL任务

时间:2019-04-04 10:17:39

标签: tsql ssis

我的SSIS软件包包括一个T-SQL任务。我有一个要传递给我的T-SQL任务的包参数,但是我找不到正确的语法来做到这一点:

DECLARE @myVariable int;
SET @myVariable = $Package::myParameter --not working
SET @myVariable = @[$Package::myParameter] -- also not working

将参数传递给T-SQL任务的正确方法是什么?

2 个答案:

答案 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任务。

根据the documentation

  

如果需要运行参数化查询,请将查询结果保存到   变量或使用属性表达式,则应使用Execute SQL   任务而不是执行T-SQL语句任务。欲了解更多   信息,请参阅执行SQL任务。