0

我有这个 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 语句,但我发现我也不喜欢那样

有人可以指导我做错了什么

谢谢

4

1 回答 1

4

表变量仅在创建它的范围内有效

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

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

 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) 
于 2013-02-13T20:14:34.243 回答