代码之家  ›  专栏  ›  技术社区  ›  user29053

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

  •  1
  • user29053  · 技术社区  · 17 年前

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

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

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

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

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

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

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

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

    我已经看到了如何将其用于脚本任务和脚本组件的示例,但我想简单地使用ExecuteSQL任务来实现这一点。

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

    有什么想法吗?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Derek B. Bell    17 年前

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

        2
  •  0
  •   Sam    16 年前

    因此,您需要执行SQL任务来获取参数吗?

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

    也许我误解了。..

    推荐文章