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

goo*_*yui 3 sql sql-server-2005 sql-server-2008

SQL 2005 / SQL 2008

Declare @temp nvarchar(1000)

set @temp = 'ABC'


select col1,col2 from tableA
Run Code Online (Sandbox Code Playgroud)

与选择查询一起,如何向选择查询中添加变量?

expected output :-

select col1,col2,@temp as [col3] from tableA
Run Code Online (Sandbox Code Playgroud)

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

Joh*_*hnD 5

如果尝试动态指定列名,则可以看看执行动态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
Run Code Online (Sandbox Code Playgroud)

因此,例如,如果您有一个表“ MyTable”,其中的列名为“ x”,“ y”和“ z”,则该表可能类似于:

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
Run Code Online (Sandbox Code Playgroud)

  • 为什么要串联+ @columnName + *并将其作为参数传递给sp_executesql? (2认同)