2015-12-04 81 views
0

我有以下查询:强制SQL Server查询返回任何行

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

这应该返回1,如果条件为真(明显),但我希望它返回任何结果(没有行),如果假。相反,它返回一个空行。我如何强制它返回1或什么都不返回?

回答

3

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

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

当然,您可能会考虑评估该标量函数。他们的表现糟糕。

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())) 
           ) 
+0

你的人。似乎我只是在想它。谢谢! – Aginor

0

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

5

如何

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

SELECT * FROM dbo.table其中1 = 0

+1

虽然此代码可能会回答问题,但提供有关为何和/或代码如何回答问题的其他上下文可提高其长期价值。 –

+0

这并没有回答这个问题,考虑到了这个帖子,而不仅仅是标题。 – faintsignal