Tsql SSIS中T-SQL任务的动态T-SQL输入

Tsql SSIS中T-SQL任务的动态T-SQL输入,tsql,ssis,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任务传递参数的正确方法是什么?您不能向T-SQL任务传递参数 根据: 如果需要运行参数化查询,请将查

我的SSIS包包括一个T-SQL任务。我有一个要传递到T-SQL任务中的包参数,但找不到正确的语法:

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

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

您不能向T-SQL任务传递参数

根据:

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


我建议使用executesql任务,因为它提供了比executet-SQL语句任务更多的功能。但是,如果希望将T-SQL任务与参数一起使用,可以通过创建包含参数的表达式的字符串变量来完成。下面是一个例子。要将其设置为T-SQL任务的语句,请转到任务的属性窗口(按
F4
),单击
Expressions
字段旁边的省略号,选择
SqlStatementSource
属性并添加包含T-SQL的字符串变量作为
表达式。由于SQL中的变量是INT数据类型,我假设包参数也是,因此需要将其转换为字符串,作为字符串变量中表达式的一部分。这仍将被解析为数字数据类型并提交给SQLServer。此转换使用下面的
(DT_STR,长度,代码页)
功能完成。这只是使用了一个长度为10的示例。作为旁注,
(DT_WSTR,length)
函数将用于Unicode数据。确保将SQL文本括在引号中,如下所示。还要注意,参数名称在表达式中是区分大小写的,例如,如果参数名称是
@[$Package::MyParameter]
,则
@[$Package::MyParameter]
,以小写字母m开头,则
@[$Package::MyParameter]
将返回错误

"DECLARE @myVariable INT;
SET @myVariable = " + (DT_STR, 10, 1252)@[$Package::myParameter] + " 
UPDATE Database.Schema.Table
SET NAME = 'TW'
WHERE ID = @myVariable"

是否要将参数传递到执行sql任务?google执行sql任务时会发生什么parameter@Nick.McDermaid当我的问题涉及到一个t-sql任务时,为什么我要在谷歌上搜索有关sql任务的内容?你有什么理由想使用t-sql而不是sql吗?因为SQL可以参数化。T-SQL需要事先构建一个字符串。如果必须使用T-SQL任务,则需要了解expressions@Nick.McDermaid我认为T-SQL只能通过一个T-SQL任务来运行,但我可以通过一个简单的SQL任务来运行它(那么,如果这个T-SQL任务是为了什么呢?)。不管怎样,我对你提到的这些“表达”很好奇。我永远记不起来了。我只是用谷歌搜索一下。我从不使用T-SQL任务,只使用SQL。