Sql server 如何在sql server 2012中使用动态列进行查询

Sql server 如何在sql server 2012中使用动态列进行查询,sql-server,Sql Server,我有下面的示例代码。结果是,它将这些列作为VARCHAR类型 declare @col1 varchar(80)='[Column1]' declare @col2 varchar(80)='[Column2]' SELECT @col1,@col2 FROM MyTable 试试看 您必须使用动态SQL: DECLARE @col1 VARCHAR(80) = 'Column1'; DECLARE @col2 VARCHAR(80) = 'Column2'; DECLARE @sql NV

我有下面的示例代码。结果是,它将这些列作为VARCHAR类型

declare @col1 varchar(80)='[Column1]'
declare @col2 varchar(80)='[Column2]'
SELECT @col1,@col2 FROM MyTable
试试看


您必须使用动态SQL:

DECLARE @col1 VARCHAR(80) = 'Column1';
DECLARE @col2 VARCHAR(80) = 'Column2';

DECLARE @sql NVARCHAR(MAX);

SELECT @sql = 'SELECT ' + QUOTENAME(@col1) + ', ' + QUOTENAME(@col2) + ' FROM MyTable;';

EXEC sp_executesql @sql;

请注意,您必须确保列名是真实的列名。您还需要参数化查询以增加安全性。如果您弄错了其中任何一个,可能会造成巨大的安全问题。

您将需要动态SQL,谢谢您,但我想知道解决方案。我在卖这个是的。你可以用它作为参考。我不知道你的最终目的是什么,但我要说的是,这很可能会导致无法维护、性能不佳的混乱局面。对于你真正想要实现的目标,很可能有更好的解决方案。有没有更好的选择?应该是
exec(@query)
Hi@Puneet_2696717谢谢你,但如果能解决你的问题,接受一个答案会更好。哦,是的,Shnugo,已经解决了,这就是我感谢你的原因:)但是根据表现,还有其他选择吗?
DECLARE @col1 VARCHAR(80) = 'Column1';
DECLARE @col2 VARCHAR(80) = 'Column2';

DECLARE @sql NVARCHAR(MAX);

SELECT @sql = 'SELECT ' + QUOTENAME(@col1) + ', ' + QUOTENAME(@col2) + ' FROM MyTable;';

EXEC sp_executesql @sql;