用于解析XML字段和检索值的SQL查询
我试图解析一个XML字段,它是SCOM 2007数据仓库数据库的一部分,并且发现了许多示例,这些示例显示了实现这一点的类似场景,但是没有任何内容返回值,通常是在我运行查询时返回值 这里是一个例子,大约一千行中的一行我需要对其运行,其中我想输入值England和UK。组成标记的GUID对于每个数据类型都是一致的,所以永远不会更改,可以用于查询等。当然,每行都有不同的城市和国家代码,这就是我想要捕获的 表名为dbo.ManagedEntityProperty,列名为PropertyXML 192.168.1.0 WASPDC01.LIV10.Local 192.168.1.0 英格兰 255.255.255.0 英国 忙碌的用于解析XML字段和检索值的SQL查询,sql,sql-server,xml,parsing,Sql,Sql Server,Xml,Parsing,我试图解析一个XML字段,它是SCOM 2007数据仓库数据库的一部分,并且发现了许多示例,这些示例显示了实现这一点的类似场景,但是没有任何内容返回值,通常是在我运行查询时返回值 这里是一个例子,大约一千行中的一行我需要对其运行,其中我想输入值England和UK。组成标记的GUID对于每个数据类型都是一致的,所以永远不会更改,可以用于查询等。当然,每行都有不同的城市和国家代码,这就是我想要捕获的 表名为dbo.ManagedEntityProperty,列名为PropertyXML 192.1
有什么建议或指导吗?我尝试按照实现建议,但我仍处于SQL XML查询的初级阶段,以前从未做过类似的事情。尝试类似的操作:
SELECT
ID,
CountryCode = PropertyXML.value('(/Root/Property[@Guid=sql:variable("@GuidCountryCode")]/text())[1]', 'varchar(100)'),
CountryName = PropertyXML.value('(/Root/Property[@Guid=sql:variable("@GuidCountry")]/text())[1]', 'varchar(100)')
FROM
dbo.ManagedEntityProperty
-声明您感兴趣的两个GUI
声明@GuidCountry唯一标识符
在GuidCountry设置='FA3887C3-F274-306A-867C-37105A190F78'
声明@GuidCountryCode唯一标识符
SET@guidconcountycode='F8ABF27F-A169-6FCD-1862-C06F1DB4BF24'
;将所有属性列表设置为
选择
ID,-或任何唯一标识表中单个行的内容
PropertyGuid=XProp.value'@Guid',uniqueidentifier',
PropertyValue=XProp.value'.',varchar100'
从…起
dbo.ManagedEntityProperty
交叉应用
PropertyXML.nodes'/Root/Property'作为XTblXProp
挑选*
从所有属性列表
其中@GuidCountry、@GuidCountryCode中的PropertyGuid
这基本上是将表中的所有节点枚举到单独的行中,然后从这些行中获取您感兴趣的两个项目
更新:如果需要将这两个值显示为单独的列,则必须使用以下内容:
SELECT
ID,
CountryCode = PropertyXML.value('(/Root/Property[@Guid=sql:variable("@GuidCountryCode")]/text())[1]', 'varchar(100)'),
CountryName = PropertyXML.value('(/Root/Property[@Guid=sql:variable("@GuidCountry")]/text())[1]', 'varchar(100)')
FROM
dbo.ManagedEntityProperty
非常棒,反应非常快,效果非常好。当我使用SQL 2005时,只需调整declare部分,但这是我的错,因为我没有告诉您版本:如果我想显示输出,同一行不同列中的两个XML值,我该怎么做?我正试图了解“.”以及如何将脚本行为从这一点更改为可能分别以每个GUID为目标,而不是枚举所有GUID,然后进行筛选。知道我的意思吗?