2013-11-27 64 views
0

我想知道是否有方法通过使用SQL变量来选择列。例如。表是 - ID,姓名,地址使用变量选择列?

DECLARE @Column varchar(25) 
SET @Column = 'Name' -- This can be another column also 
SELECT @Column 
FROM MyTable 

这说明我的“名称”,因为在我的表中的行多次。 它甚至可以做我想要的东西吗?

谢谢。

+0

正是在我看来,你试过了吗? – NickyvV

+0

尽管动态SQL可以工作,但它可能会非常快速地变得非常复杂。它也无法重用,因为它[不能(容易地)与查询结合](http://stackoverflow.com/questions/1492411/sql-server-select-from-stored-procedure)。 (也就是说,我会建议针对基于此操作的基于*的设计)。 – user2864740

回答

1

SQL是目前解释您的变量为一个字符串。

From a previous answer on stack overflow:

DECLARE @Column varchar(25) 
SET @Column = 'Name' -- This can be another column also 
SET @sqlText = N'SELECT ' + @Column + ' FROM MyTable' 
EXEC (@sqlText) 
+0

感谢您告诉我原因。 –

2

您可以使用动态SQL为:

DECLARE @Column nvarchar(25) 
SET @Column = 'Name' -- This can be another column also 
DECLARE @sql nvarchar(max) = N'SELECT ' + @Column + N' FROM MyTable' 

exec(@sql) 
3

能做到这一点使用动态SQL:

DECLARE @Column varchar(25) 
     ,@sql VARCHAR(MAX) 
SET @Column = 'Name' -- This can be another column also 
SET @sql = 'SELECT '[email protected]+' 
      FROM MyTable 
      ' 
EXEC (@sql) 

你可以通过改变EXECPRINT使测试你的动态SQL查询确保每个所产生的查询是你” d期望。