我有这个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语句,我发现我不喜欢它
有人可以指导我做错了吗
谢谢
答案 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)