2013-04-30 2 views
0

Как я могу вернуть новый запрос, если мой первый запрос ничего не возвращал? Я использую ssis для выполнения хранимой процедуры, если хранимая процедура ничего не возвращает, она должна передать новый запрос, который затем будет сохранен в новом назначении ole db.Возвращает новый запрос, если rowcount = 0

Пример запроса:

Declare @DepartureDate DATETIME = '4/16/2013', 

begin 

select PassengerNumber,FromTime,ToTime,Remarks from table a where DepartureDate = @DepartureDate 



if (@@ROWCOUNT = 0) 
    begin 


     Select 
     '-' [PassengerNumber], 
     '00:00' [FromTime], 
     '00:00' [ToTime], 
     'No Mismatch' [Remarks] 
    end 
End 

Моя проблема заключается в том, что мой источник OLE DB возвращает пустой запрос вместо нового запроса, предоставленной если (@@ ROWCOUNT = 0). Поэтому данные не передаются в источник ole db.

ответ

1

Как об использовании UNION?

SELECT PassengerNumber, FromTime, ToTime, Remarks 
FROM tableA 
WHERE DepartureDate = @DepartureDate 
UNION ALL 
SELECT '-' [PassengerNumber], 
     '00:00' [FromTime], 
     '00:00' [ToTime], 
     'No Mismatch' [Remarks] 
WHERE 0 = (SELECT COUNT(*) FROM tableA WHERE DepartureDate = @DepartureDate) 
+0

НЕ СУЩЕСТВУЕТ может быть немного быстрее: 'WHERE NOT EXISTS (SELECT 1 FROM TABLEA WHERE DepartureDate = @DepartureDate)' ' –

+0

и UNION ALL' является еще более вероятно, будет быстрее. Никогда не используйте 'UNION', когда вы можете использовать' UNION ALL' –

+0

@ ElectricLlama правильно, здесь нет смысла использовать 'UNION'. –

1
DECLARE @count INT = -1; 
SELECT @count = COUNT(*)FROM TABLE a; 

IF (@count > 0) 
BEGIN 
    SELECT PassengerNumber,FromTime,ToTime,Remarks FROM TABLE a; 
END 
ELSE 
    SELECT 
     '-' [PassengerNumber], 
     '00:00' [FromTime], 
     '00:00' [ToTime], 
     'No Mismatch' [Remarks]; 
    END 
END 
Смежные вопросы