2016-04-26 41 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表格