sql 2005 / sql 2008
Declare @temp nvarchar(1000) set @temp = 'ABC' select col1,col2 from tableA
expected output :- select col1,col2,@temp as [col3] from tableA
其中@temp指定tableA中列的名称.
解决方法
如果您尝试动态指定列名,可以查看执行动态sql.但是,您应该首先了解这种方法的危险性:
http://www.sommarskog.se/dynamic_sql.html
在该页面中,有一个示例显示动态指定表名称 – 您可以更改它,以便它动态指定列名称:
CREATE PROCEDURE general_select @tblname nvarchar(128),@key varchar(10),@debug bit = 0 AS DECLARE @sql nvarchar(4000) SET @sql = 'SELECT col1,col3 FROM dbo.' + quotename(@tblname) + ' WHERE keycol = @key' IF @debug = 1 PRINT @sql EXEC sp_executesql @sql,N'@key varchar(10)',@key = @key
例如,如果你有一个名为’x’,’y’和’z’的表’MyTable’,它可能看起来像:
DECLARE @columnName nvarchar(128) DECLARE @sql nvarchar(4000) set @columnName = 'z' SET @sql = 'SELECT x,y,' + @columnName + ' from MyTable' EXEC sp_executesql @sql,N'@columnName varchar(128)',@columnName = @columnName