在SQL查询中动态选择列

k80*_*0sg 6 sql sql-server

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

Declare @var1 = [Code]

(SELECT @var1
 FROM [VoucherType]
 WHERE [DeletedBy] IS NULL
 AND [AutoID] = 1)
Run Code Online (Sandbox Code Playgroud)

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

Non*_*nym 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
Run Code Online (Sandbox Code Playgroud)

您必须编写动态查询,然后执行 sp_executesql

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

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

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


Biz*_*pps 5

您需要使用动态 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
Run Code Online (Sandbox Code Playgroud)

这篇文章可能会有所帮助

从变量中的名称访问表

SQL:根据变量选择动态列名

问候