列别名中的串联字符串

时间:2015-06-09 13:28:29

标签: sql sql-server sql-server-2008

我有一些奇怪的要求。我需要连接字符串作为ms-sql中的列别名。

有关。例如,

问题:

@declare @columnName as nvarchar(10)='2015'    
select 1 as [Rank in @columnName]

预期输出:

------------------
|  Rank in 2015  |
------------------
|       1        |
------------------

编辑:我很乐意不使用动态SQL,如果它不是唯一的选择

编辑:

我从sql这样做的原因是我没有这样的前端。

我们实际上正在向用户提供数据,这些用户也是前端开发人员,然后他们可能会使用该数据并构建自己的界面,考虑到我想要发布本身有意义的数据集,而不必明确提及。

我希望你明白了。

2 个答案:

答案 0 :(得分:1)

以下是一个合理的解决方案:

declare @columnName nvarchar(10) = '2015';
declare @sql nvarchar(max) = 'select @value as ' + quotename('Rank in ' + columnName);

exec sp_executesql @sql, N'@value int', @value = @value;

讨论时间稍长。如果要基于现有列名创建新列名,则需要在查询中修改更多内容。对于动态SQL,我强烈建议你习惯sp_executesql仅仅exec - 它允许你将参数传入和传出执行环境。除了有用之外,这有助于防止SQL注入攻击。

那就是说,我认为你应该给列通用名称,并在运行查询的任何应用程序中处理列命名。听起来像列标题的选择是为了满足一些用户。他们可能会变幻无常并改变主意,或者不同的用户可能需要不同的列标题。在应用程序层处理此问题意味着此类更改需要更改SQL代码。而且,从长远来看,更多的本地化变革更安全。

答案 1 :(得分:0)

你可以在下面做,但它是动态SQL:

DECLARE @columnName NVARCHAR(10) = '2015]'
EXEC ('SELECT ''1'' AS [Rank in ' + @columnName)