2016-04-26 45 views
0

由于某些原因,在使用在脚本开头声明的两个内部表时,出现上述错误消息。 我可以在表格中插入数据,但是当我尝试将它们加入到一个字段中时,它们都出现在这两个表格中。 我在SQL2012必须使用内部表声明标量变量

SELECT * 
FROM @ITAB01 
JOIN @ITAB02 
on @[email protected] 

Error: Must declare the scalar variable "@ITAB01".. Error 137. SQLSTATE 42000. Severity 15. MsgState 2. Line 83.

+1

请提供表格声明 – UnhandledExcepSean

+1

您在查询中是否有单独的批次?即。你用'GO'? –

回答

2

工作你需要给一个名称表变量。

不喜欢这样的:

declare @t1 table 
(
    p1 int 
) 

declare @t2 table 
(
    p2 int 
) 

select * 
from @t1, 
@t2 
where @t1.p1 = @t2.p2 

但像他这样:

declare @t1 table 
(
    p1 int 
) 

declare @t2 table 
(
    p2 int 
) 

select * 
from @t1 t1, 
@t2 t2 
where t1.p1 = t2.p2 
你的情况

所以:

SELECT * 
FROM @ITAB01 ITAB01 
JOIN @ITAB02 ITAB02 
on ITAB01.country=ITAB02.country 
+0

谢谢!这解决了我的问题! – Edwin

+0

惊人的标题是如何误导和任何机构可以想知道,表没有宣布+1 – TheGameiswar

1

如果你想引用查询其他地方的表(在FROM条款之外),引入别名:

SELECT * 
FROM @ITAB01 t1 
JOIN @ITAB02 t2 
on t1.country=t2.country 

别名也很有用,因为您可以缩短长名称。一旦您希望在单个查询中多次使用相同的表格,则还需要这些文件。

0

表变量只有一批是可见他们created.there原因是多方面的,他们可以走出去的范围像动态sql,去statemnts ..

所以,检查你的代码,看看有走出去。如果您的表格包含超过1000条记录,我还建议使用Temp表格