SSIS查找转换 - SQL查询无法正常工作

时间:2016-09-09 08:55:48

标签: sql ssis sql-server-2012 sql-server-2008-r2

我有一个SSIS包,可以部署到SQL Server 2012 SSISDB中,它使用Lookup转换。我正在使用SQL查询的结果来执行查找比较。

enter image description here

这不起作用,我得到的所有行为"没有匹配"。

查询如下:

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)

我错过了什么吗?为什么会出现这种情况?

1 个答案:

答案 0 :(得分:2)

  

为什么会出现这种情况?

SSIS查找组件只能考虑多语句查询(例如您的查询)返回的第一个结果。

当您没有SET NOCOUNT ON时,您的查询返回的第一个结果将是消息" 1行受影响"或类似的东西。查找组件将无法查看查询后半部分返回的结果集。

这就是设置NOCOUNT ON修复问题的原因。 "行受影响"查询的第一部分将不会返回消息,并且返回的唯一内容将是查询的第二部分的结果集,然后查找组件将处理该结果集。