动态地从源服务器创建目标表与SSIS
问题描述:
我需要一些建议如何解决以下任务:动态地从源服务器创建目标表与SSIS
我得到了基于IBM DB2(IBMDA400)源系统里面有很多表,这些表应迅速改变,每日结构。我必须从DB2中将指定的表加载到MSSQL 2008 R2服务器中。所以我认为使用SSIS是最好的选择。
我的第一次尝试只是添加两个数据源,将所有表格删除到MSSQL中,然后用“从@Table中选择* Into @Table”重新创建它们。但我无法得到这个工作,因为我无法连接两个OLEDB连接。我也尝试过使用Openrowset语句,但SQL Server不允许出于安全原因,我不允许更改它。
我的第二次尝试是从源手动读取表并删除并为每个循环重新创建表,然后通过数据流任务加载数据。但是我一直在从执行SQL任务中获取元数据......所以我没有获得列名和类型。
我不敢相信这太难实现了。为什么数据流任务中没有“如果不存在则创建表”复选框?
当然,我在这里搜索了这个问题,但找不到解决方案。
由于提前, 垫
答
这是溶液我得到在末端:
- 创建文件/目录,其用于源表的选择。
- 重要提示:创建你的SQL实例链接的服务器或工作的ConnectionString为OPENROWSET(我没能做到这一点 - 我选用的链接服务器)
- 查询源文件/表
- 构建环通结果集
- 使用变量和脚本任务,以构建查询
- 删除目标表
- 建一个查询字符串用INSERT INTO TABLE FROM OPENROWSET(或者如果使用链接服务器OPENQUERY)
- 执行日是陈述
完成。 正如我上面所说,我对此并不满意,但现在应该没问题。如果我有另一个解决方案,我会更新这个。
那么你可以通过从sys.objects中选择并删除它来检查SQL脚本中是否存在表。这听起来像是DBA的噩梦。如果你不知道即将到来的结构,你将如何将数据加载到SQL Server数据库中?如果表格会一直改变,你打算如何使用这些数据? – PacoDePaco
数据将与单独的前端一起使用。我不确定你是否正确。我不会从源中删除任何东西,我只是想将整个结构复制到sql服务器上... – Pad
我做到了。我的意思是你将如何在任何应用程序中使用数据?除非它是“从...中选择*”,否则您甚至无法查询数据以及可怕设计的尖叫声。通常,您将创建一个临时数据库,其中包含源系统中的所有数据,并在匹配数据结构后将其推送到您的OLTP数据库。你能区分源码中没有改变的任何列吗?那么在将来你可以根据需要添加新的列。 – PacoDePaco