2016-09-09 1 views
0

У меня есть пакет SSIS для развертывания в SSISDB SQL Server 2012, и он использует преобразование Lookup. Я использую результат SQL-запроса для выполнения сравнения.Преобразование SSIS 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) 

Я что-то не хватает? Почему это поведение?

+0

Вот что делает 'SET NOCOUNT ON': http://stackoverflow.com/questions/1483732/set-nocount-on-usage Возможно, это были запросы до, отправили счетчик записей и, следовательно, повредили ваш Lookup , – Nebi

+0

@Nebi. В самом деле, похоже, что я буду более внимательно читать о том, что действительно делает «SET NOCOUN ON», вместо поиска проблем в LookUp Transformation. – nunopacheco

+0

Я бы также рекомендовал посмотреть, что такое «блокирующие» преобразования. Если ваша трансформация 'aggregate' не будет развиваться до тех пор, пока все строки не будут перенесены, что может отрицательно сказаться на производительности. Почти любой тип агрегации для целей сверки или ведения журнала может быть более эффективно реализован с помощью задач «Выполнять SQL» в вашем потоке управления. – iamdave

ответ

2

Почему это поведение?

Компонент поиска SSIS может рассматривать только первый результат, возвращаемый запросом многозадачности, таким как ваш.

Если у вас нет SET NOCOUNT ON, первым результатом, возвращаемым вашим запросом, будет сообщение «1 строка (и)», или что-то в этом роде. Компонент Lookup не сможет просмотреть набор результатов, возвращенный второй половиной вашего запроса.

Именно поэтому установка NOCOUNT ON устраняет проблему. Сообщение «затронутые строки (строки)» не будет возвращено первой частью запроса, и единственное, что будет возвращено, будет набор результатов второй части запроса, который затем обработает компонент Lookup.

+0

после некоторого ознакомления с опцией 'SET NOCOUNT ON', я вижу, какое влияние это может оказать на SP, трансформации и т. Д. Спасибо! – nunopacheco