2012-04-13 68 views
2

我正在运行一个SSIS包,我想在运行期间设置所需变量的值。下面的例子如何在运行时更改程序包变量值?

variable1= 1145554478 nvarchar(30)

我使用nvarchar的,因为我添加更多的字符的字符串。

variable2= [ + variable1 + _S] 

variable1variable2是包变量。

我已经搜索了在运行时为变量设置一个值的方法。正如我的想法,它似乎可以用SQL任务编辑器来完成。所以,我创建了一个。将variable1设置为输入值,将ResultSet设置为单行,并将其设置为variable2。

然后在代码我写

set Variable2 = '[' + ? + '_S]' 

它不工作,这里的错误

Error: 0xC002F210 at Execute SQL Task, Execute SQL Task: Executing the query "set Variable2 = '[' + ? + '_S]'" failed with the following error: "Line 1: Incorrect syntax near '='.". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly. Task failed: Execute SQL Task.

是一个SQL任务编辑器运行时设置变量的最佳方式?

我认为我在任务编辑器中编写的代码是错误的,因为那里的代码并不总是与定期使用的相同的普通SQL。

+0

是的Siva,你不会错过任何东西。我从任务编辑器解决了这个问题,但我也很想知道你的意见。谢谢 – 2012-04-13 15:09:17

回答

3

您不能在SQL语句中设置SSIS变量的值,而是返回值并将其分配给您的变量。

更改您的语句来

SELECT '[' + ? + '_S]' 

改变你的结果集为“单行”,然后在“结果集”左边用0

+0

不错的一个msmucker,非常感谢,它的工作。不知道ResultSet中的'0' – 2012-04-13 14:40:14

+1

它是单行结果集列的索引,所以如果你要选择其他的东西(SELECT'['+?+'_S]','SomethingElse' )你可以使用结果名称1 – msmucker0527 2012-04-13 14:44:33

+0

等等,我现在明白了。非常感谢!这将在未来的流程中有用。 – 2012-04-13 14:46:38

2

最简单的方法是(通常)创建一个脚本任务,并用C#或VB编写代码。

+0

在C#中我还不够精通,甚至没有像这样简单的代码。这就是为什么即时通讯试图从SQL做到这一点。将谷歌一些C#虽然 – 2012-04-13 14:32:40

+0

@丹尼尔 - 谷歌应该帮助你在这里。您需要编写的代码应该只有一行左右。 – 2012-04-13 14:36:48

3

这里的结果名称添加变量是基于另一个变量的值在运行期间操作变量值的方法。该示例使用SSIS 2008 R2,但功能在所有SSIS版本上都一样。

  • 创建一个新的SSIS包。
  • 右键单击程序包上的任意位置,然后从上下文菜单中选择Variables变量将显示窗格。
  • 变量窗格中,创建两个新变量命名为Variable1和数据类型StringVariable2
  • 我们将Variable1设置为值Test_Value

    Variables

  • 选择第二个变量变量2,按F4带来的属性窗格。

  • 在属性窗格上,将属性EvaluateAsExpression更改为True
  • 然后点击Expression属性上的省略号按钮。

    Properties of Variable2

  • 在表达式生成器对话框,粘贴在Expression文本区域表达"[" + @[User::Variable1] + "_S]"

  • 如果您单击评估表达式按钮,您将看到Variable2将评估的值。在运行期间,变量Variable2将使用该表达式自动评估出现在Variable1中的值。

  • 表达式生成器也可以允许制定更复杂的表达式。请参阅Click this link以查看另一个表达式示例。

希望有所帮助。

Expression Builder

+0

非常感谢Siva。你的解释不完全正确,但很好解释。再次感谢,很多。 – 2012-04-13 15:40:32

相关问题