强制SQL Server查询不返回任何行

时间:2015-12-04 16:55:37

标签: sql sql-server

我有以下查询:

SELECT 
     CASE
          WHEN ([DBO].fn_WorkDays(GETDATE(), DATEADD(d, 1, EOMONTH(GETDATE()))) = 2)
               THEN 1
     END

如果条件为真(显然),则返回1,但如果为false,我希望它不返回任何内容(没有行)。相反,它返回一个空行。如何强制它返回1或什么都没有?

5 个答案:

答案 0 :(得分:5)

怎么样

IF [DBO].fn_STRS_WorkDays(GETDATE(), DATEADD(d, 1, EOMONTH(GETDATE()))) = 2
    SELECT 1

答案 1 :(得分:3)

你编码的方式总是会返回一行。您可以重新排列查询以将标量函数放在where子句中。

SELECT 1
where [DBO].fn_STRS_WorkDays(GETDATE(), DATEADD(d, 1, EOMONTH(GETDATE()))) = 2

当然,您可以考虑评估该标量函数。众所周知,他们的表现很差。

答案 2 :(得分:3)

从dbo.table中选择*,其中1 = 0

答案 3 :(得分:1)

使用where子句和子查询:

select 1
from (select [DBO].fn_STRS_WorkDays(GETDATE(),
                                    DATEADD(day, 1, EOMONTH(GETDATE()) )
                                   ) as workdays
     ) x
where workdays = 2;

实际上,子查询不是必需的。我认为where没有from看起来很尴尬。你可以把它写成:

select 1
where 2 = [DBO].fn_STRS_WorkDays(GETDATE(),
                                 DATEADD(day, 1, EOMONTH(GETDATE()) )
                                )

答案 4 :(得分:0)

为了在该条件下实际过滤数据,需要在查询的WHERE子句部分,而不仅仅是在列定义部分。
这可能意味着您需要指定两次条件(一次在列部分中,一次在WHERE子句中)。