如何从sql server中的表中选择别名?

时间:2016-03-29 14:42:46

标签: sql-server tsql

我有一个语言表,我想根据指定的语言从该表中选择别名。

ALTER PROCEDURE sp_executesql
(@parameter1 NVARCHAR(MAX)
,@parameter2 NVARCHAR(MAX)
,@code NVARCHAR(MAX),@language NVARCHAR(MAX))

DECLARE @sql NVARCHAR(MAX)

SET @sql = 'SELECT '+@parameter1+' AS (SELECT @language FROM Languages WHERE code=somecolumn) '+@paramter2+' AS (SELECT @language FROM Languages WHERE code='+@code+') FROM mytable' 

编辑: 在存储过程中,我需要类似的东西。

感谢您的回答..

2 个答案:

答案 0 :(得分:3)

您不能使用子查询以这种方式构建别名,您需要使用动态SQL来执行此操作。

DECLARE @language NVARCHAR(255)  -- or whatever type your field is
SELECT @language=language FROM Languages WHERE code=@code

DECLARE @sql NVARCHAR(MAX) = 'SELECT ' + @parameter1 + ' AS ' + QUOTENAME(@language) + ' FROM MyTable'
EXEC sp_executesql @sql

(请注意别名周围包含QUOTENAME - 如果您的别名包含无效字符,这是一项安全功能。)

您可以为存储过程中的第二个参数重复上面的代码。

答案 1 :(得分:1)

试试这个:

CREATE PROCEDURE sp_NameOfSP
(@parameter1 NVARCHAR(MAX)
 ,@parameter2 NVARCHAR(MAX)
 ,@code NVARCHAR(MAX)
 ,@language NVARCHAR(MAX))
AS
BEGIN 
 DECLARE @sql NVARCHAR(MAX)

 SELECT TOP(1) @language=LanguageColumn FROM Languages WHERE code=somecolumn

 SET @sql = 'SELECT '+@parameter1+' AS '+@language+', '

 SELECT TOP(1) @language=LanguageColumn FROM Languages WHERE code=@code

 SET @sql=@sql+@paramter2+' AS '+@language+' FROM mytable'

 EXEC(@SQL)
END

LanguageColumn替换为Languages

中正确的列名