如何为存储过程中的列返回空结果

时间:2019-05-17 06:48:00

标签: sql sql-server tsql sql-server-2012

我有一个存储过程,该过程返回带有某些值的结果,但是如果给定的输入日期是周末,则需要为所有列返回空值。

我使用了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 

是乏味的。

如果给定的日期是周末,是否可以通过任何方式返回带有空字符串的列?任何帮助将不胜感激

2 个答案:

答案 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')