我正在寻找一种使用单独查询中的前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
在这个例子中,我想通过几个临时列的顶部选择命名列。但是这不起作用。有没有人建议如何使这项工作?
提前谢谢你, 菲利普
答案 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
表的内容时才使用 - 当这些表可以包含用户输入时,请不要使用此方法。