代码之家  ›  专栏  ›  技术社区  ›  nunopacheco

SSIS查找转换-SQL查询不工作

  •  0
  • nunopacheco  · 技术社区  · 9 年前

    我有一个用于部署到SQL Server 2012 SSISDB的SSIS包,它使用查找转换。我正在使用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 回复  |  直到 9 年前
        1
  •  2
  •   Tab Alleman    9 年前

    为什么会这样?

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

    SET NOCOUNT ON ,查询返回的第一个结果将是消息“1行受影响”或类似消息。查找组件将无法查看查询的后半部分返回的结果集。

    这就是为什么将NOCOUNT设置为ON可以解决这个问题。查询的第一部分不会返回“受影响的行”消息,返回的唯一内容将是查询第二部分的结果集,然后查找组件将处理该结果集。