sql - SSIS 查找转换未捕获不匹配的值

标签 sql sql-server t-sql ssis lookup

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

从逻辑上讲,如果一条记录在生产表中被删除并且存在于数据仓库表中,则此查找应该找到它并将其重定向到无匹配输出,正确吗?

问题是查找没有找到不匹配的记录,或者我正在向后执行某些操作。

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

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

enter image description here

在“事实表”OLE DB 源中,我从事实表中提取记录,其中 Region 等于连接字符串使用数字 1 - 4 标识的任何区域。我输入了查询放在一个变量中,这样它就可以是动态的。我也只提取暂存表中不能为空的列,以最大限度地减少我提取的数量,并且我只真正需要 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 源内部显示变量查询:

enter image description here

接下来我们进行转换,其中我将与无匹配输出不匹配的行重定向

enter image description here

此处的连接与生产环境相关,并且此处的查询又是动态的,因为生产环境中不存在 Region 列。

enter image description here

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

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

更新的查询:

"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 进行搜索。结果什么也没发生,也没有记录被重定向到任何地方。

最佳答案

事实证明我并没有完全理解查找转换是如何工作的。今天早上我通过使用 ID 列作为联接而不是缓存它来解决了我的问题。

enter image description here

关于sql - SSIS 查找转换未捕获不匹配的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42098688/

相关文章:

mysql - 尝试使用连接和嵌套选择通过 MySQL 编译用户信息列表时出错

php - 如何对 MySQL 数据库中的行进行排序

sql - 在SSMS中,如何找到包含星号,一些文本和另一个星号的字符串?

sql-server - 为什么更好的隔离级别意味着 SQL Server 更好的性能

sql - T-SQL:如何执行此操作:select * from xy where uid in (@parameter)

c# - 错误消息 : "Only primitive types or enumeration types are supported in this context."

C# SMO 和 SqlEnum 引用错误

sql - WAITFOR DELAY 不会在每个 WHILE 循环中单独起作用

t-sql - 我是否必须在 T-SQL 中的 catch block 中回滚事务之前对事务进行计数?

python - 生成查询时出现 mysql 语法错误