必须使用内部表声明标量变量

时间:2016-04-26 14:38:34

标签: sql sql-server-2012

出于某种原因,我在使用两个内部表时得到了上述错误消息,这些内容表在脚本开头声明。 我可以将数据插入到表中,但是当我尝试将它们连接到一个字段上时,它存在于两个表中,它让我知道。 我在SQL2012工作

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

错误:必须声明标量变量“@ ITAB01”。错误137. SQLSTATE 42000.严重级15. MsgState 2.第83行。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

如果要引用查询中其他位置的表(FROM子句之外),请引入别名:

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

别名也很有用,因为您可以缩短长名称。一旦您想在单个查询中多次使用同一个表,它们也是必需的。

答案 2 :(得分:0)

表变量只在它们创建的批处理中可见。有许多原因导致它们超出范围,如动态sql,Go statemnts ..

请检查您的代码并查看范围超出范围。如果您的表包含超过1000条记录,我还建议使用临时表