我有一个语言表,我想根据指定的语言从该表中选择别名。
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'
编辑: 在存储过程中,我需要类似的东西。
感谢您的回答..
答案 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
表