Sql server 使用SSI从源服务器动态创建目标表

Sql server 使用SSI从源服务器动态创建目标表,sql-server,etl,dynamically-generated,db2-400,ssis-2008,Sql Server,Etl,Dynamically Generated,Db2 400,Ssis 2008,我需要一些建议如何解决以下任务: 我得到了一个基于IBMDB2(IBMDA400)的源系统,它有很多表,这些表的结构每天都在快速变化。我必须将指定的表从DB2加载到MSSQL 2008 R2服务器中。因此,我认为使用SSIS是最好的选择 我的第一次尝试只是添加这两个数据源,删除MSSQL中的所有表,并使用“Select*Into@Table From@Table”重新创建它们。但我无法使其工作,因为我无法连接两个OLEDB连接。我还尝试了Openrowset语句,但出于安全原因,SQL Serv

我需要一些建议如何解决以下任务:

我得到了一个基于IBMDB2(IBMDA400)的源系统,它有很多表,这些表的结构每天都在快速变化。我必须将指定的表从DB2加载到MSSQL 2008 R2服务器中。因此,我认为使用SSIS是最好的选择

我的第一次尝试只是添加这两个数据源,删除MSSQL中的所有表,并使用“Select*Into@Table From@Table”重新创建它们。但我无法使其工作,因为我无法连接两个OLEDB连接。我还尝试了Openrowset语句,但出于安全原因,SQL Server不允许这样做,也不允许我更改它

我的第二次尝试是从源代码中手动读取表,使用for-each循环删除并重新创建表,然后通过数据流任务加载数据。但是我在从执行SQL任务获取元数据时遇到了麻烦。。。所以我没有得到列名和类型

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

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

提前感谢,,
Pad

这是我最后得到的解决方案:

  • 创建用于选择源表的文件/表
  • 重要提示:在SQL实例上创建链接服务器或为OPENROWSET创建工作连接字符串(我无法这样做-我选择了链接服务器)
  • 查询源文件/表
  • 通过resultset构建一个循环
  • 使用变量和脚本任务构建查询
  • 删除目标表
  • 从OPENROWSET(或者如果使用链接服务器OPENQUERY)使用INSERT INTO TABLE构建另一个查询字符串
  • 执行此语句
  • 完成了。
    正如我在上面所说的,我对此不太满意,但现在应该可以了。如果我有其他解决方案,我会更新它。

    您可以通过从sys.objects中选择来检查SQL脚本中是否存在表,如果存在,则删除。这听起来像是DBA的噩梦。如果您不知道即将发生的事情的结构,您将如何将数据加载到SQL Server db中?如果表格会一直更改,您打算如何使用这些数据?这些数据将与单独的前端一起使用。我不确定你是否理解正确。我不会从源代码中删除任何内容,我只想将整个结构复制到sql server…我做到了。我的意思是,你将如何在任何应用程序中使用这些数据?除非它是“select*from…”,否则你甚至无法查询数据,这是一个可怕的设计。通常,您将使用源系统中的所有数据创建一个临时数据库,并在匹配数据结构后将其推送到OLTP数据库。您能否区分源中未更改的任何列?以后如果需要的话,你可以添加新的专栏。我知道这听起来有多可怕。目标应用程序将跟踪更改并为其创建。我知道“正常”ETL方式以及SSAS的所有步骤,因此我可以理解您的不满。但我不需要解释为什么需要这样做。不管怎样,我找到了一个解决办法,效果很好。我对它不是很满意,但我会在以后修改它。