【问题标题】:Must declare the scalar variable "@Hlava" Must declare the scalar variable "@Vaha"必须声明标量变量“@Hlava” 必须声明标量变量“@Vaha”
【发布时间】:2017-09-26 10:36:17
【问题描述】:

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

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

【问题讨论】:

  • 您是一起执行所有语句,还是单独执行?
  • 标记您正在使用的 dbms。该代码是特定于产品的。
  • 请详细说明您正在使用哪个数据库(SQl 服务器、MS Sql 等)等问题。此外,最好提供示例输入和输出,以便人们进行调查

标签: sql sql-server


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    • 2013-07-03
    • 1970-01-01
    相关资源
    最近更新 更多