【问题标题】:SQL Server : conditional columns (output schema change)SQL Server:条件列(输出架构更改)
【发布时间】:2016-08-04 09:13:34
【问题描述】:

我有一个简单但令人沮丧的场景。

简化

create procedure [dbo].[test] 
    @bShow bit = 0
as
begin
    if(@bShow = 0)
        SELECT name, surname 
        FROM table_person
    ELSE
        SELECT name, surname, email 
        FROM table_person
end

我知道我可以使用动态 SQL,将其全部包装为带有条件的字符串,以确定是否应显示附加列。

我还可以将所有数据转储到带有附加列的#temp 表中,如果不满足条件,只需删除该列并从临时表中选择所有数据。

但是,上述内容还有其他含义,动态 sql 将意味着 SQL 不会像应有的那样优化和缓存我的过程,而第二种方法(从 #temp 中删除不需要的)意味着对于每条记录,附加列将无论是否使用都会被检索。

我也可以使用带有 2 个单独选择的 if 语句,但对于 SQL 后期优化,它并不理想,因为每次执行 proc 时都会使用不同的执行路径。

我的特定要求中的附加列是一个相当繁重的计算,对我的表现有很大影响,因此只有在需要时才显示它们的参数,它将使用数据透视表来连接附加列。

我已经尝试过 CTE 和子查询以及我能想到的几乎所有其他途径。

有什么建议吗?

【问题讨论】:

    标签: sql-server tsql schema conditional


    【解决方案1】:

    抱歉,如果我不明白这一点,但你能做到吗:

    create procedure [dbo].[test] 
        @bShow bit = 0
    as
    begin
            SELECT name, surname, CASE WHEN @bShow = 0 THEN email ELSE NULL
            FROM table_person
    end
    

    【讨论】:

      猜你喜欢
      • 2011-09-23
      • 1970-01-01
      • 2011-05-24
      • 2017-10-21
      • 1970-01-01
      • 2017-12-16
      • 2016-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多