SSIS将平面文件导入动态目标

时间:2015-06-18 19:32:32

标签: ssis

我正在处理一个项目,我需要将多个csv文件导入数据库。我目前有2个SQL服务器(例如东海岸和西海岸),我需要能够动态分割数据。每个文件都有一个客户端ID号,我可以在表中查找并确定哪个服务器处理该客户端的数据。我已经想出了如何将它添加到我的数据流任务中。但是,我现在需要能够将数据拆分到不同的服务器。我找到了一种方法,但只有两台服务器。我们正在考虑添加多个额外的服务器来分割工作负载。我需要能够动态地将数据重定向到不同的服务器。

例如:

csv文件包含来自供应商的十几个客户端的数据行。在四台服务器中,每台服务器都包含几行。在我的数据流中,我正在导入平面文件,并根据客户端ID查找每行的服务器。基本上我的数据在这一点上看起来像是:

ClientID   ServerName   Col1   Col2   Col3...
------------------------------------------------------
12345      ServerA      data   data   data
54321      ServerB      data   data   data
12345      ServerA      data   data   data
78901      ServerC      data   data   data
54321      ServerB      data   data   data
76543      ServerD      data   data   data

我需要知道如何根据ServerName列使SSIS占用每一行并将其插入到指定的表中(表名/结构在服务器之间是相同的)。

我想我可能需要使用某种foreach循环并将Server设置为变量,但不确定如何实现它。

非常感谢任何建议。

1 个答案:

答案 0 :(得分:-1)

如果连接字符串中的所有其他内容与serverName不同,则执行以下操作:

1:创建执行sql任务以创建初始选择。将结果集发送到Object类型的ResultSet变量。同时将sql任务结果集类型设置为“完整结果集”。

2:将其推入forEach循环,并将5列映射到SSIS变量,每个变量对应一个(ClientID,ServerName等)。

3:为您的服务器创建一个连接管理器,然后打开Expression选项卡。选择“连接字符串”并将其设置为评估为“YourHost / {user:ServerName} / DatabaseName:Port .. etc”。基本上只需在验证连接正常后复制并粘贴连接字符串,并替换servername部分。

4:创建另一个sql任务,这次它只是一个插入语句,其值被参数化(?,?,?,?,?)并将变量映射到参数。

应该这样做。如果您需要更多指导,请告诉我。我必须在SSIS中做各种疯狂的事情!