【问题标题】:How to use a variable value created in an Execute SQL Task in Precedence Constraint Editor?如何使用在 Precedence Constraint Editor 的 Execute SQL Task 中创建的变量值?
【发布时间】:2019-01-28 12:31:35
【问题描述】:

我需要根据 n-multiple 变量值(isnull tr​​ue 或 false)运行 n-multiple Execute SQL Task。这个变量是在前面执行 sql 任务(CONDITIONAL QUERY)中的 ssms 脚本中创建的。如何将 ssms 脚本中的变量值输出到 ssis 中的条件表达式?

我的两个变量是@beneficiary@gempar。它们要么存储日期类型值,要么存储空值。

【问题讨论】:

  • 不太清楚你的意思,但你可以在执行 T-SQL 任务中捕获 SELECT 语句的输出,我使用常规窗格中的 ResultSet 设置,然后映射个人列(如果使用单行)或数据集对象(如果使用完整结果集)到 Result Set 窗格中的变量。或者,如果您使用带有 OUTPUT 参数的存储过程,则将它们映射到“参数映射”窗格中(不出所料)。
  • 存储过程是指文件连接吗?因为这是我正在使用的。
  • 不,存储过程是指 SQL 对象。您正在使用执行 T-SQL 任务;你不是在查询文件...
  • 代码图像对用户没有多大帮助,但是,在您的 SQL 中,您没有任何输出参数。正如我所提到的,OUTPUT 参数是存储过程的一部分;您不能将它们作为内联语句的一部分。如果您想使用这些,您需要将您的 SQL 转换为存储过程。

标签: sql-server visual-studio ssis execute-sql-task


【解决方案1】:

您的条件查询任务应该将“结果集”设置为“单行”,就像屏幕截图中一样:

然后只需将变量分配给输出列:

如果您的查询返回两个值,您可以使用序数位置,

所以 ResultName = 0,可以映射到 @beneficiary 和 ResultName 1 到 @gempar

更多详情:SSIS Basics: Using the Execute SQL Task to Generate Result Sets


更新: T-SQL 任务中使用的脚本应该通过 SELECT 返回值,而不是通过 PRINT:

--SOME SELECTs..
..
SELECT @benefeciary, @gempar

【讨论】:

  • 我无法单击“结果集”部分中的“添加”按钮。我用 SQL T-Script 更新了这个问题,它作为文件连接放在 Execute SQL Task 中。
  • @BoelsMaxence,更新答案,您正在使用 PRINT,它应该是 SELECT.. SSIS 忽略打印语句..
  • 我从 sql 脚本中删除了打印
  • 只要在最后一行添加:
  • 我应该使用参数映射还是结果集?
【解决方案2】:

您可以在执行 SQL 任务中指定一个 ResultSet,并按照以下步骤将结果映射到一个变量:

  1. 在 SQL 语句的末尾添加以下行

    SELECT @benefeciary as benefeciary, @gempar as gempar
    
  2. 在执行 SQL 任务中,将 ResultSet 选项更改为 single Row

  3. 转到结果集选项卡
  4. 将列索引(从0 开始)映射到相关变量

    0 >> benefeciary
    1 >> gempar
    

更多细节,有很多文章描述了这个过程:

  1. SSIS Basics: Using the Execute SQL Task to Generate Result Sets
  2. Map Result Sets to Variables in an Execute SQL Task
  3. How To Set and Use Variables in SSIS Execute SQL Task

【讨论】:

  • 仅链接的答案在 Stack Overflow 上通常不受欢迎;他们经常吸引反对票,链接可能会失效(使它们对未来的读者毫无用处),并且有一个特定的审查选项可以将它们从低质量队列中删除。为了改善您的答案,我建议添加您链接的文章的相关部分,否则这可能会更好作为评论。
  • @Larnu 没问题,我会提供更多细节
  • 无法单击“结果集”部分中的“添加”按钮。可能是因为脚本是文件连接?
  • @BoelsMaxence 检查常规选项卡中的结果集选项是否设置为Single Row
【解决方案3】:

除了map result set to variable,您可能还需要将任务的执行结果设置为使用ExecValueVariable.的变量

附加的是我的 SSIS 包之一,其中包含一个名为 HasRecord 的变量。单击Execute SQL Task 并将ExecValueVariable 设置为所需的变量User::HasRecord

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-01
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 2017-05-02
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多