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

SSIS Lookup transformation not capturing non matching values

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

从逻辑上讲,如果记录在生产环境中被删除 table 并且存在于数据仓库中 table 此查找应该找到它并将其重定向到 No Match Output 正确吗?

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

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

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

在 "Fact Table" OLE DB 源中,我从我的事实 table 中提取记录,其中 Region 等于连接字符串使用数字 1 - 4 标识的区域。我将查询放在一个变量中,以便它可以是动态的。我也只在暂存 table 中提取不能为空的列,以尽量减少我提取的数量,我只 真的 需要 ID 和 Region 列删除记录,因为它们在各自的区域内应该是唯一的。

内部FindDeletes变量:

"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 "

内部 OLE DB 源显示变量查询:

接下来我们进行转换,我将不匹配的行重定向到 No Match Output

这里连接到生产环境,这里的查询也是动态的,因为 Region 列在生产环境中不存在。

显示查找 SQL 查询的表达式:

"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;"

更新查询:

"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;"

最后,我加入了 Region 上的两个 table,然后搜索 ID。结果是没有任何反应,也没有任何记录被重定向到任何地方。

这是您需要输入的第一个动态查询:

  --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)

原来我没有完全理解 Lookup Transformation 的工作原理。我今天早上解决了我的问题,方法是还使用 ID 列作为连接而不是缓存它。