首页 文章

使用SSIS将数据从Oracle导入SQL服务器

提问于
浏览
1

我们希望使用SSIS从Oracle导入数据到SQL服务器我能够将数据从Oracle传输到SQL中的一个表(Staging) . 然后我需要转换数据,我发现我需要运行存储过程来将数据从Staging转换为Actual 生产环境 数据 . 但我想知道我们怎么做 .

enter image description here

EDIT #1

  • 源表有四个列,其中一个字段包含日期,但其数据类型为字符串

  • 目标表还有四列但不会存储两列,因为源列和目标列之间存在映射

  • 这个映射存储在两个表中,用于两个列,如表一个存储 SourceFeatureIDDestincationFeatureID 同样第二个表存储 SourcePIDDestincationPID

  • 数据会定期更新,因此我们需要从最后更新的目标数据中获取剩余的数据 SourceDate > LastUpdated_destination_date

2 回答

  • 1

    Update 1:可用于在数据流任务中实现目标的组件

    来源和目的地

    • OLEDB Source :从登台表读取,您可以使用SQL命令仅返回包含SourceDate> Destination Date的数据
    SELECT * FROM StaggingTable T1 WHERE CAST(SourceDate as Datetime) > (SELECT MAX(DestDate) FROM DestinationTable)
    
    • OLEDB Destination :将数据插入 生产环境 数据库

    加入其他 table

    • Lookup transformation :查找转换通过将输入列中的数据与参考数据集中的列连接来执行查找 . 您可以使用查找来访问基于公共列中的值的相关表中的其他信息 .

    • Merge Join :合并连接转换提供通过使用FULL,LEFT或INNER连接连接两个已排序数据集而生成的输出

    转换列数据类型

    • Data Conversion transformation: 数据转换转换将输入列中的数据转换为不同的数据类型,然后将其复制到新的输出列

    • Derived Column transformation: 派生列转换通过将表达式应用于转换输入列来创建新列值 . 表达式可以包含转换输入中的变量,函数,运算符和列的任意组合 . 结果可以添加为新列,也可以作为替换值插入现有列 . 派生列转换可以定义多个派生列,任何变量或输入列都可以出现在多个表达式中 .

    参考文献


    初答

    我发现我需要运行存储过程来将数据从Staging转换为Actual 生产环境 数据

    This is not true ,您可以使用 DataFlow Task 执行数据传输 .

    有很多链接可以找到详细的解决方案:

    使用SSIS执行存储过程

    无论如何,要从SSIS执行存储过程,您可以使用 Execute SQL Task

    其他信息:

  • 0

    我'm not going to go through your comments. I'我将发布一个将 StagingTable 加载到 TargetTable 的示例,其中包含日期转换的示例,以及使用映射表的示例 .

    此代码创建存储过程

    CREATE PROC MyProc
    AS
    BEGIN
    
        -- First delete any data that exists 
        -- in the target table that is already there
        DELETE TargetTable 
        WHERE EXISTS (
           SELECT * FROM StagingTable 
           WHERE StagingTable.SomeKeyColumn = TargetTable.SomeKeyColumn
        )
    
    
        -- Insert some data into the target table
        INSERT INTO TargetTable(Col1,Col2,Col3)
    
        -- This is the data we are inserting
        SELECT 
        ST.SoureCol1,    -- This goes into Col1
        -- This column is converted to a date then loaded into Col2
        TRY_CONVERT(DATE, ST.SourceCol2,112), 
        -- This is a column that has been mapped from another table
        -- That will be loaded into Col3
        MT.MappedColumn
        FROM StagingTable ST
        -- This might need to be an outer join. Who knows
        INNER JOIN MappingTable MT
        -- we are mapping using a column called MapCol
        ON ST.MapCol = MT.MapCol
    END
    

    此代码运行您刚刚创建的存储过程 . 在SSIS包中的数据流之后,将其置于执行SQL任务中:

    EXEC MyProc
    

    关于日期转换,请参阅此处的编号样式:

相关问题