SSIS数据从Oracle传输到SQL Server-检查表是否存在,如果不存在,则创建它
开发工具-Visual Studio 2015更新2 基本上,我想在SSIS包中执行以下操作:SSIS数据从Oracle传输到SQL Server-检查表是否存在,如果不存在,则创建它,sql,sql-server,oracle,ssis,data-transfer,Sql,Sql Server,Oracle,Ssis,Data Transfer,开发工具-Visual Studio 2015更新2 基本上,我想在SSIS包中执行以下操作: 删除数据库中的所有现有表 将数据从多个Oracle数据库表传输到SQL Server表 INSERT INTO SQL_DB_TABLE SELECT * FROM ORACLE_DB.TABLE 序列容器中的第一个任务是删除SQL任务中的所有表。然后,对于每个Oracle表,我都有一个数据流任务。在每个任务中,我都有一个ODBC源代码,它是ORACLE_DB.TABLE中的一个
INSERT INTO SQL_DB_TABLE
SELECT *
FROM ORACLE_DB.TABLE
SELECT*。我添加了一个“目的地助手”,然后单击“新建”,以基于Oracle表结构创建表
添加所需的表名,然后单击“确定”。此时,新表将添加到SQL Server
我正在寻找一种方法,在每次运行序列容器时为每个Oracle表复制“新建”(在SQL Server中创建表)过程。需要注意的是,Oracle表中的列可能会更改,这就是我每次都必须重新创建它们的原因。数据流不能这样做。数据流必须具有一致的元数据。换句话说,每次运行相同的数据流时,列必须保持不变
即使查询是SELECT*,您也必须设置源输出的列,如果这些列在后续运行中发生更改,数据流将中断
在静态SSIS包中实现这一点的唯一方法是使用脚本任务。这将是一个令人望而生畏的写作
更好的方法可能是使用BiMLScript动态创建包。数据流不能这样做。数据流必须具有一致的元数据。换句话说,每次运行相同的数据流时,列必须保持不变
即使查询是SELECT*,您也必须设置源输出的列,如果这些列在后续运行中发生更改,数据流将中断
在静态SSIS包中实现这一点的唯一方法是使用脚本任务。这将是一个令人望而生畏的写作
更好的方法可能是使用BiMLScript动态创建包。您可以这样做,但会有很多脚本任务。我会将表的列元数据从oracle选择到一个包变量中,然后动态地构建一个“CREATETABLE”语句和一个“EXECUTESQL task”from变量
select column_name,data_type,data_length,nullable
from user_tab_cols c where table_name = '{your table}'
需要做一些工作来确定oracle数据类型和SQL等价物之间的关系
问题是下游验证—您将无法使用传统的目标对象—而是使用脚本组件作为目标,这将非常缓慢且难以维护—假设您在变量中有列名和表名,这应该是不可能的。您可以这样做,但会有大量脚本任务。我会将表的列元数据从oracle选择到一个包变量中,然后动态地构建一个“CREATETABLE”语句和一个“EXECUTESQL task”from变量
select column_name,data_type,data_length,nullable
from user_tab_cols c where table_name = '{your table}'
需要做一些工作来确定oracle数据类型和SQL等价物之间的关系
问题是下游验证—您将无法使用传统的目标对象—而是使用脚本组件作为目标,这将非常缓慢且难以维护—假设您在变量中有列名和表名,这应该是不可能的