我有一个SSIS包,可以部署到SQL Server 2012 SSISDB中,它使用Lookup转换。我正在使用SQL查询的结果来执行查找比较。
这不起作用,我得到的所有行为"没有匹配"。
查询如下:
DECLARE @LastJobDate DATETIME
SELECT @LastJobDate = COALESCE(MIN(S.LastImportDate), DATEADD(DAY, -2, GETDATE()))
FROM Stations S INNER JOIN
Lines L ON S.ID_Line = L.ID_Line
WHERE L.Name LIKE 'lineType%' AND S.ImportData = 1 AND S.Active = 1
SELECT J.ID_Line, J.ID_Job, J.SerialNumber
FROM [Jobs] J INNER JOIN
[Lines] L ON J.ID_Line = L.ID_Line
WHERE L.Name LIKE 'lineType%'AND J.TimeStamp >= DATEADD(HOUR, -1, @LastJobDate)
偶然地,我发现如果我在查询的开头放置一个[SET NOCOUNT ON]
,它就会起作用。
DECLARE @LastJobDate DATETIME
SET NOCOUNT ON
SELECT @LastJobDate = COALESCE(MIN(S.LastImportDate), DATEADD(DAY, -2, GETDATE()))
FROM Stations S INNER JOIN
Lines L ON S.ID_Line = L.ID_Line
WHERE L.Name LIKE 'lineType%' AND S.ImportData = 1 AND S.Active = 1
SELECT J.ID_Line, J.ID_Job, J.SerialNumber
FROM [Jobs] J INNER JOIN
[Lines] L ON J.ID_Line = L.ID_Line
WHERE L.Name LIKE 'lineType%'AND J.TimeStamp >= DATEADD(HOUR, -1, @LastJobDate)
我错过了什么吗?为什么会出现这种情况?
答案 0 :(得分:2)
为什么会出现这种情况?
SSIS查找组件只能考虑多语句查询(例如您的查询)返回的第一个结果。
当您没有SET NOCOUNT ON
时,您的查询返回的第一个结果将是消息" 1行受影响"或类似的东西。查找组件将无法查看查询后半部分返回的结果集。
这就是设置NOCOUNT ON修复问题的原因。 "行受影响"查询的第一部分将不会返回消息,并且返回的唯一内容将是查询的第二部分的结果集,然后查找组件将处理该结果集。