使用动态SQL通过向简单的sql查询添加变量来指定列名

时间:2011-08-19 15:12:36

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

sql 2005 / sql 2008

Declare @temp nvarchar(1000)

set @temp = 'ABC'


select col1,col2 from tableA

与select查询一起,如何将变量添加到选择查询?

expected output :-

select col1,col2,@temp as [col3] from tableA

其中@temp指定tableA中列的名称。

2 个答案:

答案 0 :(得分:4)

如果您尝试动态指定列名,可以查看执行动态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, col2, 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

答案 1 :(得分:2)

这样的事情:

select col1,col2 from tableA WHERE col1 = @temp

或者这个:

select col1,col2,@temp as col3 from tableA WHERE col1 = @temp

或者这个:

select col1,col2,@temp as col3 from tableA

或者如果@temp是列名,那么您是否正在寻找动态查询?

 SET @temp = 'select col1,col2, ' + @temp + ' as col3 from tableA'
 EXEC sp_executesql @temp

...