我有一个数据库字段名称调用Code
,我试图使用如下变量名称选择它:
Declare @var1 = [Code]
(SELECT @var1
FROM [VoucherType]
WHERE [DeletedBy] IS NULL
AND [AutoID] = 1)
显然,SQL会将@var1
解释为字符串而不是我的数据库字段,我怎么能以这种方式将@var1
识别为字段名称[Code]
而不是可能没有任何select或if语句的字符串。
答案 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
答案 3 :(得分:0)
请尝试使用以下代码:
DECLARE @ var1 VARCHAR(50)
SET @var1 = '[Code]'
EXEC ('SELECT ' + @var1 + ' FROM [VoucherType]
WHERE [DeletedBy] IS NULL AND [AutoID] = 1 ')