我有以下查詢:強制SQL Server查詢返回任何行
SELECT
CASE
WHEN ([DBO].fn_WorkDays(GETDATE(), DATEADD(d, 1, EOMONTH(GETDATE()))) = 2)
THEN 1
END
這應該返回1,如果條件爲真(明顯),但我希望它返回任何結果(沒有行),如果假。相反,它返回一個空行。我如何強制它返回1或什麼都不返回?
我有以下查詢:強制SQL Server查詢返回任何行
SELECT
CASE
WHEN ([DBO].fn_WorkDays(GETDATE(), DATEADD(d, 1, EOMONTH(GETDATE()))) = 2)
THEN 1
END
這應該返回1,如果條件爲真(明顯),但我希望它返回任何結果(沒有行),如果假。相反,它返回一個空行。我如何強制它返回1或什麼都不返回?
你有這種編碼的方式,它總是會返回一行。您可以重新排列查詢以將標量函數放在where子句中。
SELECT 1
where [DBO].fn_STRS_WorkDays(GETDATE(), DATEADD(d, 1, EOMONTH(GETDATE()))) = 2
當然,您可能會考慮評估該標量函數。他們的表現糟糕。
使用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()))
)
爲了實際過濾就可以了需要在你的查詢的WHERE子句部分,不只是在列定義部分是標準的數據。
這可能意味着您需要指定您的條件兩次(一次在列部分中,一次在WHERE子句中)。
如何
IF [DBO].fn_STRS_WorkDays(GETDATE(), DATEADD(d, 1, EOMONTH(GETDATE()))) = 2
SELECT 1
SELECT * FROM dbo.table其中1 = 0
雖然此代碼可能會回答問題,但提供有關爲何和/或代碼如何回答問題的其他上下文可提高其長期價值。 –
這並沒有回答這個問題,考慮到了這個帖子,而不僅僅是標題。 – faintsignal
你的人。似乎我只是在想它。謝謝! – Aginor