.net 当没有公共字段时,是否使用SWQL(SolarWinds查询语言)连接2个以上的表?

.net 当没有公共字段时,是否使用SWQL(SolarWinds查询语言)连接2个以上的表?,.net,vb.net,solarwinds-orion,.net,Vb.net,Solarwinds Orion,我正在使用SolarWinds Orion NPM(网络性能监控)监控我的节点。我使用Orion SDK从SWIS(SolarWinds informarion Service)获取警报信息,并将其输入vb.net控制台应用程序 我正在使用一些vb.net代码: Function GetOneAlert(ByVal swis As InformationServiceClient) As AlertInfo Dim query As String, result As XElement

我正在使用SolarWinds Orion NPM(网络性能监控)监控我的节点。我使用Orion SDK从SWIS(SolarWinds informarion Service)获取警报信息,并将其输入vb.net控制台应用程序

我正在使用一些vb.net代码:

Function GetOneAlert(ByVal swis As InformationServiceClient) As AlertInfo
    Dim query As String, result As XElement
    query = "SELECT TOP 1 A.AlertDefID, A.ActiveObject, A.ObjectType FROM Orion.AlertStatus A WHERE A.Acknowledged=0 ORDER BY A.TriggerTimeStamp DESC"
    result = swis.QueryXml(query)
问题是,我想从三个名为
Orion.AlertDefinitions
Orion.AlertStatus
Orion.Nodes
的表中获取
alertinformation
(太阳林信息服务),我需要加入这三个表,但我可以加入其中的两个表(
Orion.AlertDefinitions
Orion.AlertStatus
)使用如下所示的
swql
(SolarWinds查询语言)查询

query = "SELECT AlertStatus.AlertDefID, AlertDefinitions.AlertDefID, AlertDefinitions.Name, AlertStatus.State, AlertStatus.ObjectName, 
AlertStatus.TriggerTimeStamp, AlertDefinitions.Description FROM Orion.AlertStatus INNER JOIN Orion.AlertDefinitions
ON AlertStatus.AlertDefID=AlertDefinitions.AlertDefID WHERE AlertStatus.Acknowledged=0"
我知道警报的详细信息,但我不知道警报属于哪个节点。为此,我需要将“orion.node”表与其余的表联接。但是第三个表(
orion.Nodes
)在其他两个表中没有要联接的公共字段。
我需要从
Orion.Nodes
表中获取三个名为
DNS
IPAddress
NodeDescription
的字段值。

如果您对节点相关警报感兴趣,并且希望加入节点详细信息,那么您应该只选择具有
警报状态的警报。ObjectType='node'
并使用
警报状态加入us.ActiveObject
是关联节点的
NodeID
。因此查询(提及节点属性)如下所示:

SELECT AlertStatus.AlertDefID, AlertDefinitions.AlertDefID, AlertDefinitions.Name, AlertStatus.State, AlertStatus.ObjectName, AlertStatus.TriggerTimeStamp, AlertDefinitions.Description, Nodes.IPAddress, Nodes.Dns, Nodes.NodeDescription
FROM Orion.AlertStatus
INNER JOIN Orion.AlertDefinitions
  ON AlertStatus.AlertDefID=AlertDefinitions.AlertDefID
INNER JOIN Orion.Nodes
  ON AlertStatus.ActiveObject=Nodes.NodeID
WHERE AlertStatus.Acknowledged=0 AND AlertStatus.ObjectType='Node'

无论如何,对于有关Orion SDK和SWI的更具体的问题和答案,您可能想看看。

SWQL中的表之间也有自动关联,例如,下面的SWQL不使用
连接,而是使用来自多个表的调用:

SELECT E0.[Node].Caption, E0.AssignmentName, E0.CustomPollerName, 
       E0.DetailsUrl, E0.DisplayName, E0.NodeID, E0.Status, E0.StatusDescription, 
       E0.StatusIconHint, E0.StatusLED, E0.UnManaged, E0.UnManageFrom, E0.UnManageUntil, E0.Uri, 
       E0.[Node].Description, E0.[CustomPoller].[OID] = '1.3.6.1.2.1.1.3',
       E0.[CustomPollerStatusScalar].[Status]
 FROM  Orion.NPM.CustomPollerAssignmentOnNode AS E0
 WHERE E0.[Node].[SysObjectID] IS NOT NULL
   AND E0.StatusDescription NOT LIKE 'Unmanaged'