2015-03-02 160 views
0

我想查询查询是否不返回任何结果,然后打印'找不到记录',否则执行查询。如何在SQL Server中的else语句中编写SQL查询

这里是我的查询,

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 

在此查询,我想执行的,而不是打印“OK”查询。我怎样才能做到这一点?

回答

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.'