EXEC选择查询不使用临时表SQL Server 2005

时间:2013-02-13 20:11:08

标签: sql-server sql-server-2005

我有这个SQL Server 2005拼图

以下代码不起作用

 DECLARE @tmp TABLE  (ID  int IDENTITY PRIMARY KEY , strDateTime varchar(50)) 
 INSERT INTO @tmp VALUES('1/2/13') 

 DECLARE @x varchar(1000) 
 SET @x = 'SELECT * FROM ' + @tmp ;
 EXEC (@x) 

我收到以下错误

  

Msg 137,Level 15,State 2,Line 5
  必须声明标量变量“@tmp”。

如果我这样做

SET @x = 'SELECT * FROM  @tmp ' ;

我收到此错误

  

Msg 1087,Level 15,State 2,Line 1
  必须声明表变量“@tmp”。

我真正想做的是将动态列名称传递给select语句,我发现我不喜欢它

有人可以指导我做错了吗

谢谢

1 个答案:

答案 0 :(得分:4)

A table variable is only valid in the scope within which it is created

  

表变量的行为类似于局部变量。它有一个明确的定义   范围。这是函数,存储过程或批处理   声明在。

为此,您需要使用临时表:

 CREATE TABLE #tmp (ID  int IDENTITY PRIMARY KEY , strDateTime varchar(50)) 
 INSERT INTO #tmp VALUES('1/2/13') 

 DECLARE @x varchar(1000) 
 SET @x = 'SELECT * FROM #tmp';
 EXEC (@x)