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

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

我遇到的问题是,当您将服务器 IP 添加到列表中时,当时可能不知道“友好名称”,因此我只需在连接字符串列和友好名称列中包含服务器 IP桌子。我想在迭代结束后更新该表中服务器条目的友好名称列,以便它具有使用 SERVERPROPERTY('Servername') 从服务器中提取的服务器名称

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

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

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

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

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

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

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

有任何想法吗?

有帮助吗?

解决方案

如果不在脚本任务中设置变量,我看不出如何实现这一点,因为必须将 ExecuteSQL 任务设置为数据库连接。脚本任务可以实现此目的,因为它们的连接位于执行它们的服务器的上下文中。也就是说,您可以在此 ExecuteSQL 任务之前使用脚本任务,将变量设置为本地服务器实例。

其他提示

那么您需要执行 SQL 任务来获取参数吗?

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

也许我理解错了...

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top