我有以下查询:强制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