首页 文章

SSIS查找转换不捕获非匹配值

提问于
浏览
1

我正在使用查找转换来回顾我的数据仓库表以查找 生产环境 中的任何已删除记录,然后将它们发送到临时表以从数据仓库表中删除 .

从逻辑上讲,如果记录在 生产环境 表中被删除并存在于datawarehouse表中,那么这个查找应该找到它并将其重定向到 No Match Output 正确吗?

问题是查找没有找到不匹配的记录,或者我正在做一些倒退的事情 .

我应该补充一点,在 生产环境 中,有四个不同区域的4个相同的数据库 . 我的包通过循环遍历配置文件中的连接字符串来遍历每个包 . 然后,所有这些记录都标记着它们来自哪个数据库并添加到datawarehouse表中 .

这是我的数据流任务中无法正常工作的部分:

enter image description here

在"Fact Table" OLE DB源代码中,我从事实表中提取记录,其中 Region 等于连接字符串使用数字1 - 4标识的区域 . 我将查询放在变量中,以便它可以是动态的 . 我拉'm also only pulling the columns that cannot be null inside the staging table in order to minimize the amount I'我只需要ID和Region列来删除记录,因为它们在各自的区域内应该是唯一的 .

Inside FindDeletes variable:

"SELECT ID ,
        ParentItemID ,
        IsTransPerPiece ,
        PerPieceCostQuantity ,
        PerPieceCost ,
        PerPieceUnitCost ,
        OriginalPerPieceCostQuantity ,
        OriginalTransFee ,
        TransFee ,
        CostTrans ,
        CostLabor ,
        OriginalCostQuantity ,
        OriginalFacilityFees ,
        FacilityFees ,
        Region ,
        HashValue ,
        CreateDate 
FROM dbo.FactInvoiceWasteManifests
WHERE Region = CASE " + (DT_WSTR, 2) @[User::ConnectionStringID] +
       " WHEN 1 THEN 'NE'
        WHEN 2 THEN 'BALT'
        WHEN 3 THEN 'NY' 
        WHEN 4 THEN 'PA'
        END "

Inside OLE DB Source showing the variable query:

enter image description here

接下来我们进入转换,在其中我重定向与 No Match Output 不匹配的行

enter image description here

此处的连接是 生产环境 ,此处的查询再次是动态的,因为 生产环境 中不存在 Region 列 .

enter image description here

Showing the expression for the lookup SQL query:

enter image description here

"SELECT  ID,
        CASE " + (DT_WSTR, 2) @[User::ConnectionStringID] +
       " WHEN 1 THEN CAST('NE' AS NVARCHAR(25))
        WHEN 2 THEN CAST('BALT' AS NVARCHAR(25))
        WHEN 3 THEN CAST('NY' AS NVARCHAR(25))
        WHEN 4 THEN CAST('PA' AS NVARCHAR(25))
        END AS Region 
FROM    dbo.InvoiceWasteManifests;"

UPDATED QUERY:

"SELECT  ID,
        CASE 
        WHEN " + (DT_WSTR, 2) @[User::ConnectionStringID] + "=1 THEN CAST('NE' AS NVARCHAR(25))
        WHEN " + (DT_WSTR, 2) @[User::ConnectionStringID] + "=2 THEN CAST('BALT' AS NVARCHAR(25))
        WHEN " + (DT_WSTR, 2) @[User::ConnectionStringID] + "=3 THEN CAST('NY' AS NVARCHAR(25))
        WHEN " + (DT_WSTR, 2) @[User::ConnectionStringID] + "=4 THEN CAST('PA' AS NVARCHAR(25))
        END AS Region 
FROM    dbo.InvoiceWasteManifests;"

enter image description here

最后,我在 Region 上加入两个表,然后搜索ID . 结果没有任何反应,并且没有记录被重定向到任何地方 .

2 回答

  • 1

    事实证明,我并不完全了解Lookup Transformation的工作原理 . 今天早上我通过使用 ID 列作为连接而不是缓存来解决我的问题 .

    enter image description here

  • 0

    这是您需要放置的第一个动态查询:

    --declare @sql varchar(max)
      --declare @ConnectionStringID varchar(50) =1
        set @sql = 
        'SELECT ID ,
                ParentItemID ,
                IsTransPerPiece ,
                PerPieceCostQuantity ,
                PerPieceCost ,
                PerPieceUnitCost ,
                OriginalPerPieceCostQuantity ,
                OriginalTransFee ,
                TransFee ,
                CostTrans ,
                CostLabor ,
                OriginalCostQuantity ,
                OriginalFacilityFees ,
                FacilityFees ,
                Region ,
                HashValue ,
                CreateDate 
        FROM dbo.FactInvoiceWasteManifests
        WHERE Region = CASE 
                WHEN ' +  @ConnectionStringID + '=1 THEN ''''''''+CAST(''NE'' AS NVARCHAR(25))+''''''''
                WHEN ' + @ConnectionStringID + '=2 THEN ''''''''+CAST(''BALT'' AS NVARCHAR(25))+''''''''
                WHEN ' +  @ConnectionStringID + '=3 THEN ''''''''+CAST(''NY'' AS NVARCHAR(25))+''''''''
                WHEN ' + @ConnectionStringID + '=4 THEN ''''''''+CAST(''PA'' AS NVARCHAR(25))+''''''''
                END' 
      --print (@Sql)
    

相关问题