我使用查找转换来回顾我的数据仓库表,以查找生产中任何已删除的记录,然后将它们发送到临时表以从数据仓库表中删除。
从逻辑上讲,如果一条记录在生产表中被删除并且存在于数据仓库表中,则此查找应该找到它并将其重定向到无匹配输出
,正确吗?
问题是查找没有找到不匹配的记录,或者我正在向后执行某些操作。
我应该补充一点,在生产中,四个不同区域有 4 个相同的数据库。我的包通过循环配置文件中的连接字符串来循环遍历每个包。然后所有这些记录都标记有它们来自哪个数据库并添加到数据仓库表中。
这是我的数据流任务中无法正常工作的部分:
在“事实表”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 源内部显示变量查询:
接下来我们进行转换,其中我将与无匹配输出
不匹配的行重定向
此处的连接与生产环境相关,并且此处的查询又是动态的,因为生产环境中不存在 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
上连接两个表,然后根据 ID 进行搜索。结果什么也没发生,也没有记录被重定向到任何地方。
最佳答案
关于sql - SSIS 查找转换未捕获不匹配的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42098688/