在SQL查询中动态选择列

在SQL查询中动态选择列,sql,sql-server,Sql,Sql Server,我有一个数据库字段名调用code,我试图使用如下变量名来选择它: Declare @var1 = [Code] (SELECT @var1 FROM [VoucherType] WHERE [DeletedBy] IS NULL AND [AutoID] = 1) 显然,SQL会将@var1解释为字符串而不是数据库的字段,我如何才能这样做@var1被识别为字段名[code],而不是可能没有任何select或if语句的字符串。您不能在select语句中使用这样的变量 您将需要创建动态TS

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

Declare @var1 = [Code]

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

显然,SQL会将
@var1
解释为字符串而不是数据库的字段,我如何才能这样做
@var1
被识别为字段名
[code]
,而不是可能没有任何select或if语句的字符串。

您不能在select语句中使用这样的变量

您将需要创建动态TSQL

您不需要指定RDBMS,但在SQL Server中您可以使用(最好)或
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

请务必阅读:

您需要使用动态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
这篇文章可能会有帮助

关于

试试这个:

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\u executesql

要在“动态”方面添加更多内容,请使用存储过程。有关示例,请参见此处:


那就是。。。如果您使用的是Microsoft SQL SERVER,请尝试使用以下代码:

声明@var1 VARCHAR(50)


EXEC
应该避免使用
sp_executesql
因为它更高效:
EXEC
应该避免使用
sp_executesql
因为它更高效:
+@var1+
应该是
+QUOTENAME(@var1)+
以避免列名中出现空格和其他可能的特殊字符问题。它还有助于防止可能的注入问题。此外,如果您要组成一个逗号分隔的列表,每个单独的列名都应该通过QUOTENAME传递。
SET @var1 = '[Code]'

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