2016-04-25 84 views
1

我有下面的示例代码。结果是,它将这些列作为VARCHAR类型。如何使用SQL Server 2012中的动态列进行查询

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

您将需要动态SQL – Squirrel

+0

谢谢但我想知道解决方案。我是这样的http://www.codeproject.com/Articles/20815/Building-Dynamic-SQL-In-a-Stored-Procedure –

+0

是的。你可以使用它作为参考 – Squirrel

回答

2

你必须使用动态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; 

需要注意的是,你必须确保你的列名真正的列名。您还需要参数化您的查询以增加安全性。如果您遇到任何这些错误,可能会造成巨大的安全问题。

1

尝试,

declare @query nvarchar(500) = 'select ' + @col1 + ', ' + @col1 + ' FROM MyTable' 
exec @query 
+0

应该是'exec(@query)' – Squirrel

+0

谢谢你...它的工作 –

+1

你好@Puneet_2696717你说得很感谢你,但如果它解决了你的问题,接受一个答案就更好了。 [请阅读此:人的答案](http://stackoverflow.com/help/someone-answers) – Shnugo

相关问题