必须声明标量变量" @ Hlava"必须声明标量变量" @Vaha"

时间:2017-09-26 10:36:17

标签: sql sql-server

下面的代码应该是外连接2声明的表但我一直得到上​​面的错误....

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;

为什么我需要将表声明为标量变量??

1 个答案:

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