我有一个存储过程,该过程返回带有某些值的结果,但是如果给定的输入日期是周末,则需要为所有列返回空值。
我使用了IF
子句检查数据名并返回空结果集,但是如果IF
子句为true,我必须在该存储过程中键入每一列以返回空值。
我的代码:
declare @RunDate date = '20190504'
IF DATENAME(WEEKDAY, @RunDate) NOT IN ('Saturday','Sunday')
BEGIN
Do the actual Logic
END
ELSE
' ' as field1, ' ' as field2,..........' ' as fieldN
这将返回我期望的正确结果,但是有更多的存储过程,并且每个存储过程可能具有多个列,因此键入
' ' as field1, ' ' as field2,.........., ' ' as fieldN
是乏味的。
如果给定的日期是周末,是否可以通过任何方式返回带有空字符串的列?任何帮助将不胜感激
答案 0 :(得分:1)
您可以应用以下技巧-
DECLARE @RunDate date = '20190504'
IF DATENAME(WEEKDAY, @RunDate) NOT IN ('Saturday','Sunday')
BEGIN
--Do the actual Logic
--For Example
SELECT * FROM your_table
END
ELSE
BEGIN
--Do the tricks
SELECT * FROM your_table
WHERE 1= 2 -- This will never return a row!! But the column names :)
END
答案 1 :(得分:1)
我不喜欢从存储过程中返回值。如果合适的话,我更喜欢用户定义的功能。
无论如何,将结果存储在临时表中
select . ..
into #resultset
. . .;
然后在最后一步中添加条件逻辑:
select rs.*
from #resultset rs
where DATENAME(WEEKDAY, @RunDate) NOT IN ('Saturday', 'Sunday')