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

通过向简单SQL查询添加变量,使用动态SQL指定列名,sql,sql-server-2005,sql-server-2008,Sql,Sql Server 2005,Sql Server 2008,sql 2005/sql 2008 Declare @temp nvarchar(1000) set @temp = 'ABC' select col1,col2 from tableA 与select查询一起,如何向select查询添加变量 expected output :- select col1,col2,@temp as [col3] from tableA 其中@temp指定表a中某列的名称。类似以下内容: select col1,col2 from tableA WHE

sql 2005/sql 2008

Declare @temp nvarchar(1000)

set @temp = 'ABC'


select col1,col2 from tableA
与select查询一起,如何向select查询添加变量

expected output :-

select col1,col2,@temp as [col3] from tableA
其中@temp指定表a中某列的名称。

类似以下内容:

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
或者这个:

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

如果您试图动态指定列名,可以查看执行动态sql。但是,您应该确保首先了解这种方法的危险:

在该页面中,有一个示例显示动态指定表名-您可以更改它,使其动态指定列名:

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
因此,例如,如果您有一个表“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

什么与您的代码不兼容?你有错误吗?它们是什么?是的,这是一个简单的语法错误。表中没有列名称@temp i:tableA。因此,它将抛出errorTry select col1、col2、'ABC'作为表中的[col3],因为有些语言“本机”支持这种构造,例如在Foxpro中,您可以在变量前面加一个前缀&这将告诉编译器将值合并到查询中。一种称为宏替换的过程。它非常强大,但它不允许现代rdbms的许多重要步骤,它允许SQL注入。我必须同意Stephanie Pageyes,我正在通过添加动态列名来寻找动态SQL查询!!从[udf\U ComplianceMembers]@PatId中选择*这是我的实际查询,我需要向其中添加一个动态列/变量:@Compliance。我不知道如何向它添加动态列。您需要向UDF TVF添加@Compliance吗?您可以随时将其传入…但需要更新UDF才能使用它。你的UDF的代码是什么?你能帮我写一下语法吗?我不知道如何传递或者你到底想说什么从[UDF_ComplianceMembers]@PatId中选择*,从[UDF_ComplianceMembers]@PatId中选择@Complianceselect*:-这是我的实际查询,我需要在其中添加一个动态列/变量:@Compliance。我不知道如何向其中添加动态列这是如何做到的,但在您执行此操作之前,请先看看这里,为什么要连接+@columnName+,并将其作为参数传递给sp_executesql?@stepahniepage,我读了这篇文章。我们的查询目的是用于内部/生成报告,而不是用于商业!!所以,我想我们不必担心sql注入