动态地从源服务器创建目标表与SSIS

问题描述:

我需要一些建议如何解决以下任务:动态地从源服务器创建目标表与SSIS

我得到了基于IBM DB2(IBMDA400)源系统里面有很多表,这些表应迅速改变,每日结构。我必须从DB2中将指定的表加载到MSSQL 2008 R2服务器中。所以我认为使用SSIS是最好的选择。

我的第一次尝试只是添加两个数据源,将所有表格删除到MSSQL中,然后用“从@Table中选择* Into @Table”重新创建它们。但我无法得到这个工作,因为我无法连接两个OLEDB连接。我也尝试过使用Openrowset语句,但SQL Server不允许出于安全原因,我不允许更改它。

我的第二次尝试是从源手动读取表并删除并为每个循环重新创建表,然后通过数据流任务加载数据。但是我一直在从执行SQL任务中获取元数据......所以我没有获得列名和类型。

我不敢相信这太难实现了。为什么数据流任务中没有“如果不存在则创建表”复选框?

当然,我在这里搜索了这个问题,但找不到解决方案。

由于提前, 垫

+0

那么你可以通过从sys.objects中选择并删除它来检查SQL脚本中是否存在表。这听起来像是DBA的噩梦。如果你不知道即将到来的结构,你将如何将数据加载到SQL Server数据库中?如果表格会一直改变,你打算如何使用这些数据? – PacoDePaco

+0

数据将与单独的前端一起使用。我不确定你是否正确。我不会从源中删除任何东西,我只是想将整个结构复制到sql服务器上... – Pad

+0

我做到了。我的意思是你将如何在任何应用程序中使用数据?除非它是“从...中选择*”,否则您甚至无法查询数据以及可怕设计的尖叫声。通常,您将创建一个临时数据库,其中包含源系统中的所有数据,并在匹配数据结构后将其推送到您的OLTP数据库。你能区分源码中没有改变的任何列吗?那么在将来你可以根据需要添加新的列。 – PacoDePaco

这是溶液我得到在末端:

  1. 创建文件/目录,其用于源表的选择。
  2. 重要提示:创建你的SQL实例链接的服务器或工作的ConnectionString为OPENROWSET(我没能做到这一点 - 我选用的链接服务器)
  3. 查询源文件/表
  4. 构建环通结果集
  5. 使用变量和脚本任务,以构建查询
  6. 删除目标表
  7. 建一个查询字符串用INSERT INTO TABLE FROM OPENROWSET(或者如果使用链接服务器OPENQUERY)
  8. 执行日是陈述

完成。 正如我上面所说,我对此并不满意,但现在应该没问题。如果我有另一个解决方案,我会更新这个。