Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SSIS数据从Oracle传输到SQL Server-检查表是否存在,如果不存在,则创建它_Sql_Sql Server_Oracle_Ssis_Data Transfer - Fatal编程技术网

SSIS数据从Oracle传输到SQL Server-检查表是否存在,如果不存在,则创建它

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中的一个

开发工具-Visual Studio 2015更新2

基本上,我想在SSIS包中执行以下操作:

  • 删除数据库中的所有现有表
  • 将数据从多个Oracle数据库表传输到SQL Server表

    INSERT INTO SQL_DB_TABLE
        SELECT * 
        FROM ORACLE_DB.TABLE
    
  • 序列容器中的第一个任务是删除SQL任务中的所有表。然后,对于每个Oracle表,我都有一个数据流任务。在每个任务中,我都有一个ODBC源代码,它是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等价物之间的关系

    问题是下游验证—您将无法使用传统的目标对象—而是使用脚本组件作为目标,这将非常缓慢且难以维护—假设您在变量中有列名和表名,这应该是不可能的