【问题标题】:I need some help to change some code, gives error sometimes我需要一些帮助来更改一些代码,有时会出错
【发布时间】:2019-06-26 11:34:57
【问题描述】:

我正在尝试按顺序查询数据(MAC 地址),但只显示找到的第一个数据。 它大部分时间都有效,但我想当找到多个 MAC 地址时它会给我一个错误?有没有办法让这段代码工作?

我得到的错误:

MACRO SQL 错误 - 子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。

stackoverflow 中不存在语言 SWQL,我无法添加,所以我选择了 SQL-server,但它基本相同。

select coalesce((select (MAC) 
from NodeMACAddresses 
where NodeID=$@nodeid@), NULLIF('${MAC_Address}', ''), 'MAC address missing')

【问题讨论】:

  • 错误在这里告诉你问题。似乎您在 NodeMACAddresses 中有一些行与 NodeID 的值相同。
  • 肯定一样。 SQL Server 是一种产品,具有自己的 SQL 方言。每个数据库产品都有自己的方言。您使用的是什么产品,SWQL 是什么?如果标签不存在,很明显人们知道它。您必须解释它是什么,使用它的产品,最好是链接
  • 是的,错误很明显。如果内部查询返回多个结果,则任何期望 single 结果的函数都会出现错误,例如COALESCE。查询也可能是个坏主意——结果应该包含MAC 地址或什么都不包含。将真实结果与消息混在一起只会引入错误并混淆客户端代码。
  • 根据谷歌的说法,“SWQL”是“Solarwinds 查询语言”(Use SolarWinds Query Language (SWQL) in the Orion Platform),所以我现在将其添加为标签。
  • 最好的选择是只运行select MAC from NodeMACAddresses where NodeID=$@nodeid@ 并修改客户端代码以处理多个结果或没有结果。

标签: sql solarwinds-orion


【解决方案1】:

一种解决方法可能是:

select coalesce((select top 1 (MAC) 
from NodeMACAddresses 
where NodeID=$@nodeid@), NULLIF('${MAC_Address}', ''), 'MAC address missing')

现在您的子查询将始终返回最多 1 行,并解决您的问题。但这仅在您只想为每个节点显示 1 个现有 MAC 地址时才有效。

【讨论】:

  • 我收到 MACRO SQL 错误 - 'limit' 附近的语法不正确。
  • try select coalesce((select top 1 (MAC) from NodeMACAddresses where NodeID=$@nodeid@), NULLIF('${MAC_Address}', ''), 'MAC address missing')
猜你喜欢
  • 1970-01-01
  • 2014-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-06
  • 1970-01-01
相关资源
最近更新 更多