【问题标题】:ssis reset variable before reusingssis 在重用之前重置变量
【发布时间】:2017-12-11 18:21:29
【问题描述】:

我的 ssis 包中有一个变量 @[User::fileExist],如果文件存在,我用它来返回结果。

默认为0,如果文件存在,它将返回1。我决定稍后在包中重新使用此变量,如何在再次使用之前重置此变量

【问题讨论】:

  • 有几种方法。一种是在脚本组件/脚本任务中重置您的变量。 - 应该在控制流还是数据流下完成?你想把它重置回 0 吗?
  • 你为什么要重置?你不能只覆盖价值吗?如果某些东西不存在,您将其硬编码为 0?
  • @plaidDK 我的变量是 fileExist 并将值设置为 0。我有一个脚本任务,如果文件存在则检查文件位置,然后此变量设置为 1,并且它在包中沿着不同的路径.问题是我在此之后检查另一个文件并使用相同的变量,但它已经默认为 1 从之前运行所以我想在重新使用之前重置为 0
  • 然后只需将其设置为 0,然后在新路径中的脚本任务顶部再次使用它,或者在新路径中创建一个新的脚本任务,将其设置为 0
  • 您可以使用脚本任务来实现这一点,或者如果您的 SQL 服务器版本高于 2008,您可以使用表达式任务。我认为你有很好的答案。你试过了吗?

标签: sql-server variables ssis etl sql-server-data-tools


【解决方案1】:

使用表达式任务

SQL Server 2012 或更新版本

您可以使用表达式任务来实现此目的。只需在你的包中添加一个表达式任务并使用以下表达式

@[User::fileExist] = 0

阅读更多@:


使用脚本任务

或者您可以使用脚本任务来实现这一点,只需将脚本任务添加到您的包中,将此变量选择为ReadWrite Variable 并在脚本中编写以下代码(您必须选择Microsoft Visual Basic作为脚本语言)

Public Sub Main()
    Dts.Variables.Item("fileExist").Value = 0

    Dts.TaskResult = ScriptResults.Success

End Sub

【讨论】:

    【解决方案2】:

    您可以使用脚本任务重置变量的值。

    【讨论】:

    • 我同意你的看法。但是当你回答时,你不能提供一个例子它会让你的答案更好:)
    • 当我觉得可能需要它们时,我会举例说明,但在这种情况下,我觉得朝着正确的方向轻推可能就足够了。
    【解决方案3】:

    如何跳过重置并设置它:

    Dts.Variables["fileExists"].Value = System.IO.File.Exists(filePath);
    

    【讨论】:

    • 如果 fileExists 是 int 数据类型,则更改为 System.IO.File.Exists(filePath)?1:0
    【解决方案4】:

    其中一种标准且更透明的方法是在您希望变量处于活动状态的地方创建序列容器。为他们提供该容器的范围,您将确保在下一次迭代中重新创建它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-15
      相关资源
      最近更新 更多