【问题标题】:Dynamic T-SQL input to T-SQL Task in SSISSSIS 中 T-SQL 任务的动态 T-SQL 输入
【发布时间】:2019-04-04 10:17:39
【问题描述】:

我的 SSIS 包包含一个 T-SQL 任务。我有一个要传递给我的 T-SQL 任务的包参数,但我找不到正确的语法来执行此操作:

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

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

【问题讨论】:

  • 您想将参数传递给执行 sql 任务吗? google 执行sql任务参数会发生什么
  • @Nick.McDermaid 当我的问题涉及 t-sql 任务时,为什么我要在 google 上搜索有关 sql 任务的信息?
  • 有什么理由要使用 T-SQL 而不是 SQL?因为 SQL 可以参数化。 T-SQL 需要预先构建一个字符串。如果一定要使用T-SQL任务,需要学习表达式
  • @Nick.McDermaid 我认为 T-SQL 只能通过 T-SQL 任务运行,但我能够通过简单的 SQL 任务运行它(那么如果这个 T- SQL 任务?)。不管怎样,我对你提到的这些“表达方式”很好奇。
  • 我不记得了。我只是谷歌它。我从不使用 T-SQL 任务,只使用 SQL。 jamesserra.com/archive/2012/11/…

标签: tsql ssis


【解决方案1】:

我建议使用执行 SQL 任务,因为它提供比执行 T-SQL 语句任务更多的功能。但是,如果您希望使用带有参数的 T-SQL 任务,可以通过使用包含该参数的表达式创建字符串变量来完成。下面是一个例子。要将其设置为 T-SQL 任务的语句,请转到任务的属性窗口(按 F4),单击 Expressions 字段旁边的省略号,选择 SqlStatementSource 属性并添加字符串变量包含 T-SQL 作为Expression。由于您的 SQL 中的变量是 INT 数据类型,我假设包参数也是,因此需要将其转换为字符串,作为表达式的一部分包含在字符串变量中。这仍将被解析为数字数据类型并提交给 SQL Server。这个转换是通过下面的(DT_STR, length, code page) 函数完成的。这只是使用长度为 10 的示例。作为旁注,(DT_WSTR, length) 函数将用于 Unicode 数据。确保将 SQL 文本用引号括起来,如下所示。另请注意,表达式中的参数名称区分大小写,例如,如果参数名称为 @[$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"

【讨论】:

    【解决方案2】:

    您不能将参数传递给 T-SQL 任务。

    根据the documentation

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-29
      • 2011-04-03
      • 1970-01-01
      相关资源
      最近更新 更多