使用单独的查询T-sql命名查询输出列

时间:2017-01-19 10:32:46

标签: sql tsql naming

我正在寻找一种使用单独查询中的前1个选项来命名列的方法。

select
   case when t.test=1 then 1 else 0 end  as select top 1 name from #names,
   case when t.test=2 then 1 else 0 end  as select top 1 name from #names2
from table t

在这个例子中,我想通过几个临时列的顶部选择命名列。但是这不起作用。有没有人建议如何使这项工作?

提前谢谢你, 菲利普

1 个答案:

答案 0 :(得分:1)

SQL查询引擎在期望列名或别名(任何对象标识符应该是文字的)时不会计算表达式。

您可以将SELECT构造为从子查询中注入名称的字符串:

declare @stmt nvarchar(max)

set @stmt='
    select
        case when t.test=1 then 1 else 0 end as ['+(select top 1 name from #names)+'],
        case when t.test=2 then 1 else 0 end as ['+(select top 1 name from #names2)+']
    from table t'

exec(@stmt)

安全问题 正如“注入”这个词已经暗示的那样,这可能容易受到注入攻击。请谨慎使用,并且只有在您控制#names#names2表的内容时才使用 - 当这些表可以包含用户输入时,请不要使用此方法。