2015-03-02 3 views
0

Я хочу найти, если запрос не возвращает никаких результатов, а затем распечатать «нет записей найдено» еще выполнить запрос.Как написать запрос SQL внутри оператора else в SQL Server

Вот мой запрос,

select case when exists (
    SELECT CAST(dm.[ID] AS VARCHAR(100)) as ID, case when dm.[Que_Type] = 0 then 'Valid' else 'Invalid' end [Type], 
    dm.[Name_List], t.[Name], dm.[FromDate], dm.[ToDate] FROM tblDays dm(nolock) 
    inner join (select pr.ID, pr.name from tblProduct pr(nolock)) as t 
    on dm.TradeID = t.ID where 1=1 and dm.ToDate between GETDATE() and DATEADD(dd, 15, GETDATE())) 
then 'ok' 
else 'no records' 
end 

В этом запросе, я хочу, чтобы выполнить запрос вместо печати «ОК». Как я могу это сделать?

ответ

0

Вы можете использовать if заявление вместе с exists

Поскольку условная проверка просто чтобы увидеть, если будут возвращены какие-либо записи, нет необходимости выбирать все эти столбцы, так что мы просто select 1. Если записи найдены, if проверяет true, и мы запустим инструкцию sql. Если записи не найдены, мы перейдем к блоку else и print 'no records'.

Это может работать для вас:

IF(
    exists(
      select 1 
      FROM tblDays dm(nolock) 
      inner join (select pr.ID, pr.name from tblProduct pr(nolock)) as t 
       on dm.TradeID = t.ID 
      where 1=1 
      and dm.ToDate between GETDATE() and DATEADD(dd, 15, GETDATE()) 
     ) 
    ) 
BEGIN 
    SELECT CAST(dm.[ID] AS VARCHAR(100)) as ID 
      , case when dm.[Que_Type] = 0 then 'Valid' else 'Invalid' end [Type] 
      , dm.[Name_List] 
      , t.[Name] 
      , dm.[FromDate] 
      , dm.[ToDate] 
    FROM tblDays dm(nolock) 
     inner join (select pr.ID, pr.name from tblProduct pr(nolock)) as t 
      on dm.TradeID = t.ID 
    where 1=1 
    and dm.ToDate between GETDATE() and DATEADD(dd, 15, GETDATE()) 
END 
ELSE 
BEGIN 
    print 'no records' 
END 
0

Вы можете использовать @@ROWCOUNT:

По BOL:

Возвращает количество строк, затронутых в последнем заявлении.

SELECT 
    CAST(dm.[ID] AS VARCHAR(100)) AS ID, 
    CASE WHEN dm.[Que_Type] = 0 THEN 'Valid' ELSE 'Invalid' END AS [Type], 
    dm.[Name_List], 
    t.[Name], 
    dm.[FromDate], 
    dm.[ToDate] 
FROM tblDays dm(NOLOCK) 
INNER JOIN (
    SELECT 
     pr.ID, 
     pr.name 
    FROM tblProduct pr(NOLOCK) 
) AS t 
    ON dm.TradeID = t.ID 
WHERE 
    1 = 1 
    AND dm.ToDate BETWEEN GETDATE() AND DATEADD(dd, 15, GETDATE()) 

IF @@ROWCOUNT = 0 
    PRINT 'No records found.' 
Смежные вопросы