我正在使用查找转换来回顾我的数据仓库表以查找 生产环境 中的任何已删除记录,然后将它们发送到临时表以从数据仓库表中删除 .
从逻辑上讲,如果记录在 生产环境 表中被删除并存在于datawarehouse表中,那么这个查找应该找到它并将其重定向到 No Match Output
正确吗?
问题是查找没有找到不匹配的记录,或者我正在做一些倒退的事情 .
我应该补充一点,在 生产环境 中,有四个不同区域的4个相同的数据库 . 我的包通过循环遍历配置文件中的连接字符串来遍历每个包 . 然后,所有这些记录都标记着它们来自哪个数据库并添加到datawarehouse表中 .
这是我的数据流任务中无法正常工作的部分:
在"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:
接下来我们进入转换,在其中我重定向与 No Match Output
不匹配的行
此处的连接是 生产环境 ,此处的查询再次是动态的,因为 生产环境 中不存在 Region
列 .
Showing the expression for the lookup SQL query:
"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;"
最后,我在 Region
上加入两个表,然后搜索ID . 结果没有任何反应,并且没有记录被重定向到任何地方 .
2 回答
事实证明,我并不完全了解Lookup Transformation的工作原理 . 今天早上我通过使用
ID
列作为连接而不是缓存来解决我的问题 .这是您需要放置的第一个动态查询: