Sql 必须声明标量变量"@赫拉瓦“;必须声明标量变量"@“瓦哈”;

Sql 必须声明标量变量"@赫拉瓦“;必须声明标量变量"@“瓦哈”;,sql,sql-server,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

下面的代码应该是外部联接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;

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

在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

您是同时执行所有语句,还是单独执行?标记正在使用的dbms。该代码是特定于产品的。请提供有关您使用的数据库(SQl server、MS SQl等)等问题的更多详细信息。此外,最好提供样本输入和输出,以便人们能够轻松地进行调查