在SQL查询中动态选择列

时间:2011-12-10 05:33:55

标签: sql sql-server

我有一个数据库字段名称调用Code,我试图使用如下变量名称选择它:

Declare @var1 = [Code]

(SELECT @var1
 FROM [VoucherType]
 WHERE [DeletedBy] IS NULL
 AND [AutoID] = 1)

显然,SQL会将@var1解释为字符串而不是我的数据库字段,我怎么能以这种方式将@var1识别为字段名称[Code]而不是可能没有任何select或if语句的字符串。

4 个答案:

答案 0 :(得分:11)

试试这个:

DECLARE @var1 VARCHAR(20)
DECLARE @sql VARCHAR(255)

SET @var1 = 'Code'
SET @sql = 'select ' + @var1 + ' from [VoucherType] where [DeletedBy] is null and [AutoID] = 1'

EXEC sp_executesql @sql

您必须撰写动态查询,然后使用sp_executesql

执行

要在事物的“动态”方面添加更多内容,请使用存储过程。请看这里的例子:

http://www.marten-online.com/database/execute-dynamic-sql-in-mssql.html

那就是......如果你使用的是Microsoft SQL SERVER

答案 1 :(得分:3)

您需要使用动态SQL。

declare @ColName varchar(128)

declare @sql varchar(4000)

Set @ColName='Code';

select @sql = 'SELECT '+@ColName+'
  FROM [VoucherType]
 WHERE [DeletedBy] IS NULL
 AND [AutoID] = 1'
  exec sp_executesql @sql
go

这篇文章可能会有所帮助

Accessing a table from a name in a variable

SQL: Select dynamic column name based on variable

此致

答案 2 :(得分:2)

您不能在SELECT语句中使用类似的变量。

您需要创建动态TSQL。

您没有指定RDBMS,但在SQL Server中您可以使用sp_executesql(最好)或EXEC

Declare @var1 varchar(100)
Declare @sql varchar(1000)

SET @var1 = '[Code]' 
SET @sql = ' select ' + @var1 + ' from [VoucherType]' +
           ' where [DeletedBy] is null and [AutoID] = 1'

EXEC sp_executesql @sql

请务必阅读:The Curse and Blessings of Dynamic SQL

答案 3 :(得分:0)

请尝试使用以下代码:

DECLARE @ var1 VARCHAR(50)

SET @var1 = '[Code]'

EXEC ('SELECT ' + @var1 + ' FROM [VoucherType]  
       WHERE [DeletedBy] IS NULL AND [AutoID] = 1 ')