Вернуть новый запрос, если rowcount = 0

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

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

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 возвращает пустой запрос вместо нового запроса, предоставленного if(@@rowcount = 0). Таким образом, данные не передаются в источник ole db.


person anonymous1110    schedule 30.04.2013    source источник


Ответы (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)
person John Woo    schedule 30.04.2013
comment
NOT EXISTS может быть немного быстрее: WHERE NOT EXISTS (SELECT 1 FROM tableA WHERE DepartureDate = @DepartureDate) - person Nick.McDermaid; 30.04.2013
comment
и UNION ALL, скорее всего, будет быстрее. Никогда не используйте UNION, когда можно использовать UNION ALL - person Nick.McDermaid; 30.04.2013
comment
@ElectricLlama правильно, здесь нет смысла использовать UNION. - person John Woo; 30.04.2013