使用SSIS 2012包参数进行连接属性

时间:2013-06-05 17:09:00

标签: ssis

我正在尝试编写ETL,它将来自许多相同服务器的数据收集到中央存储库中。我要做的是写一个包含源地址,用户ID和密码作为参数的包,每个服务器执行一次包复制。

这可行吗?如何使用参数创建源?

2 个答案:

答案 0 :(得分:9)

我想问一下如何参数化连接管理器(即使是一个真正的单词?),而不是存储连接参数的位置。答案很简单:

  1. 为服务器,数据库,用户ID和密码创建包参数
  2. 创建连接管理器作为定义数据流组件的一部分
  3. 定义连接后,右键单击包设计屏幕底部的连接管理器,然后选择“参数化”。
  4. 在属性下拉列表中选择“ServerName”
  5. 如果跳过第1步
  6. ,请选择“使用现有参数”或创建新参数
  7. 如果使用现有参数,请从下拉列表中选择
  8. 单击“确定”保存(必须在每个参数后执行)
  9. 对其余参数重复步骤4-7

答案 1 :(得分:1)

您可以在表格中存储参数。使用sql任务查询表并将结果存储在对象变量中。然后,您可以在for循环中使用此变量。在每次循环迭代期间,使用SSIS中的表达式更改连接的值。

Several books概述了这种方法。这是代码example


以下是一些步骤 - 希望我没有错过任何东西。你提到服务器“地址”,但我不确定你到底想要做什么。此示例查询多个sql服务器。

您可以创建变量,带有对象类型的SQL_RS,带有string类型的SRV_Conn。这保存了我的服务器名称。在执行SQL任务中,我有一个查询,它返回我想查询的sql服务器的名称。然后设置以下属性:

SELECT     RTRIM(Server) AS servername
FROM         ServerList_SSIS
WHERE     (Server IS NOT NULL)
and coalesce(exclude,'0') <> 'True' 
and IsOracle is Null

执行SQL任务&gt;一般&gt; ResultSet =“完整结果集”

执行SQL任务&gt;结果集选项卡“结果集名称= 0”,变量名称=“用户:: SQL_RS”

所以我们现在在SQL_RS变量中有一个服务器名列表。

ForEach&gt;收集&gt; Enumerator =“Foreach ADO Enumerator”

ForEach&gt;收集&gt; “枚举器配置”&gt; ADO对象源变量= User :: SQL_RS

这会将SQL_RS对象的第一列映射到SRV_Conn变量,因此循环的每次迭代都会在此变量中生成一个新值。

ForEach&gt;变量映射&gt;变量= User :: SRV_Conn,Index = 0

ForEach内部是其他一些sql高管,在sql数据库上执行查询,所以我需要更改我的'MultiServer'连接的ServerName。我有一个初始查询的另一个连接,它让我得到要查询的服务器列表。使连接动态化在连接的属性中完成 - 右键单击​​连接&gt;属性。单击表达式右侧的省略号。

连接&gt;属性&gt;表达式&gt; Property = ServerName,Expression =“@ [User :: SRV_Conn]”

注意:变量映射的索引值0适用于Native OLEDB \ SQL Server Native Client。如果您正在使用其他数据库提供程序,则可能需要使用其他索引类型 - 这会使设置更加混乱。

OLEDB = 0,1
ADO.NET = @Varname
ADO = @Param1, Param2
ODBC = 1,2

完整列表here