在ExecuteSQL任务中访问“全局”变量

时间:2008-12-15 20:26:10

标签: sql ssis global-variables

我有一个SSIS包,可以执行以下操作: 从服务器表中选择连接字符串。连接字符串是服务器的名称和域(即Dalin.myhouse.com),或者是服务器的直接IP。

包迭代每个连接字符串并填充定义的“全局”变量。此变量是在Variable设计器中创建的。对于每个连接字符串,包将检索有关服务器的信息。

我遇到的问题是当你向列表添加服务器IP时,当时可能不知道'友好名称'所以我只在连接字符串列和友好名称中都有服务器IP表的列。我希望,在迭代结束后,更新该表中服务器条目的Friendly Name列,以便它使用SERVERPROPERTY('Servername')从服务器中提取服务器名称

为此,我想使用带有以下代码的ExecuteSQL Task:

UPDATE [myDB].[mySchema].[myServers]
SET [ServerName] = VarA
WHERE ConnectionString = VarB

以前的代码使用的是与myServers表所在的服务器的静态连接。

VarA表示我想通过使用SERVERPROPERTY('Servername')将ServerName设置为在单独的SQLTask中设置的全局值。它需要在一个单独的任务中,因为它必须使用当前迭代使用的同一服务器连接到服务器。

VarB在每次迭代开始时设置为列表中的下一个连接字符串。

我已经看过如何将这个用于脚本任务和脚本组件的示例,但我想简单地使用ExecuteSQL任务来完成此任务。

要点:
连接到ServerA并填充两个全局变量 连接到ServerB并使用两个全局变量更新表中的特定行。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

如果没有在脚本任务中设置变量,我无法看到如何实现这一点,因为必须将ExecuteSQL任务设置为数据库连接。脚本任务适用于此,因为它们的连接位于正在执行它们的服务器的上下文中。话虽这么说,您可以在此ExecuteSQL任务之前使用脚本任务,将任务设置为本地服务器实例。

答案 1 :(得分:0)

所以你需要执行SQL任务来获取参数吗?

http://msdn.microsoft.com/en-us/library/ms187685.aspx

也许我误解了......