声明变量并在查询中使用

时间:2014-05-02 09:50:13

标签: sql sql-server-2008

请考虑以下

declare @MyField varchar(255);
set @MyField = 'MyDatabaseField';

select distinct Table.@MyField
from Table

这会导致错误Incorrect syntax near @MyField。然后我试了一下:

select distinct Table.['+@MyField+']
from Table

但是,这会导致Incorrect column name错误。

如何在此查询中正确使用@MyField?我在SQL Server 2008上。

2 个答案:

答案 0 :(得分:2)

请尝试通过构建字符串来执行。

declare @MyField varchar(255);
set @MyField = 'MyDatabaseField';

exec ('select distinct Table.'+@MyField+' from Table')

参考sp_executesql (Transact-SQL)Using sp_executesql

答案 1 :(得分:2)

您应该使用动态SQL来实现这一目标。您可以使用sp_executesql存储过程来执行此操作。请注意,我没有将变量声明更改为** N ** VARCHAR。

declare @MyField nvarchar(255)
set @MyField = N'MyDatabaseField'

declare @sql nvarchar(max) = N'select distinct ' + @MyField + N' from TableName'

exec sp_executesql @sql