【问题标题】:How to return empty result for columns in a stored procedure如何为存储过程中的列返回空结果
【发布时间】:2019-05-17 06:47:59
【问题描述】:

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

我使用IF 子句检查数据名并返回空结果集,但如果IF 子句为真,我必须键入该存储过程中的每一列以返回空值。

我的代码:

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 

很乏味。

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

【问题讨论】:

  • 嗨,我认为选择''作为field1,''作为field2,............''作为fieldN做你想做的事
  • 不返回任何内容并让您的应用检查是否没有返回任何行。
  • 您可以使用合适的union all select '', '', .... 来避免输入字段别名。当然,Dale 的方法要好得多,除非您的代码的某些部分期望记录集结构保持不变。

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


【解决方案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

【讨论】:

    【解决方案2】:

    我不喜欢从存储过程返回值。如果合适的话,我更喜欢用户定义的函数。

    无论如何,请将您的结果存储在临时表中:

    select . ..
    into #resultset 
    . . .;
    

    然后添加条件逻辑作为最后一步:

    select rs.*
    from #resultset rs
    where DATENAME(WEEKDAY, @RunDate) NOT IN ('Saturday', 'Sunday')
    

    【讨论】:

      猜你喜欢
      • 2015-06-03
      • 2012-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-22
      • 2013-06-21
      • 1970-01-01
      相关资源
      最近更新 更多