出于某种原因,我在使用两个内部表时得到了上述错误消息,这些内容表在脚本开头声明。 我可以将数据插入到表中,但是当我尝试将它们连接到一个字段上时,它存在于两个表中,它让我知道。 我在SQL2012工作
SELECT *
FROM @ITAB01
JOIN @ITAB02
on @ITAB01.country=@ITAB02.country
错误:必须声明标量变量“@ ITAB01”。错误137. SQLSTATE 42000.严重级15. MsgState 2.第83行。
答案 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条记录,我还建议使用临时表