2017-09-26 494 views
2

下面的代碼應外連接2臺宣佈,但我不斷收到上述錯誤....必須聲明標量變量「@Hlava」必須聲明標量變量「@Vaha」

DECLARE @Hlava table 
([Datum/čas] datetime, [Filler L2 Hlava] int) 

DECLARE @Vaha table 
([Datum/čas] datetime, [Filler L2 weight] int) 

insert into @Hlava ([Datum/čas], [Filler L2 Hlava]) select [DateTime],Value 
from INSQL_LINK.Runtime.dbo.AnalogHistory 
where tagname = 'Filler_L2_hlava' order by datetime desc 


insert into @Vaha ([Datum/čas], [Filler L2 weight]) select [DateTime],Value 
from INSQL_LINK.Runtime.dbo.AnalogHistory 
where tagname = 'Filler_L2_weight' order by datetime desc 

SELECT [Datum/čas],[Filler L2 Hlava] 
FROM @Hlava 
FULL OUTER JOIN @Vaha ON @Hlava.[Datum/čas] = @Vaha.[Datum/čas]; 

SELECT [Datum/čas],[Filler L2 Hlava] 
FROM @Hlava 
Union All 
SELECT [Datum/čas],[Filler L2 weight] 
FROM @Vaha; 

爲什麼我需要將一個表聲明爲一個標量變量?

+0

你是一起執行所有的語句還是單獨執行? –

+0

標記您正在使用的dbms。該代碼是特定於產品的。 – jarlh

+0

請包括更多的細節問題,如你正在使用哪個數據庫(SQl服務器,MS Sql等)。此外,它會更好地提供樣本輸入和輸出,以便人們可以很容易地調查 –

回答

1

在SQL Server中,表別名不能以@開頭。因此,你有資格列名沒有意義的查詢像這樣:

SELECT [Datum/čas],[Filler L2 Hlava] 
FROM @Hlava FULL OUTER JOIN 
    @Vaha 
    ON @Hlava.[Datum/čas] = @Vaha.[Datum/čas]; 

所以,只要給他們別名:

SELECT [Datum/čas], [Filler L2 Hlava] 
FROM @Hlava h FULL OUTER JOIN 
    @Vaha v 
    ON h.[Datum/čas] = v.[Datum/čas]; 

我也建議您簡化列名等等他們不必逃跑。例如,Datum_čas而不是Datum/čas

+0

謝謝你,工作 –