2015-12-04 36 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