Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于解析XML字段和检索值的SQL查询_Sql_Sql Server_Xml_Parsing - Fatal编程技术网

用于解析XML字段和检索值的SQL查询

用于解析XML字段和检索值的SQL查询,sql,sql-server,xml,parsing,Sql,Sql Server,Xml,Parsing,我试图解析一个XML字段,它是SCOM 2007数据仓库数据库的一部分,并且发现了许多示例,这些示例显示了实现这一点的类似场景,但是没有任何内容返回值,通常是在我运行查询时返回值 这里是一个例子,大约一千行中的一行我需要对其运行,其中我想输入值England和UK。组成标记的GUID对于每个数据类型都是一致的,所以永远不会更改,可以用于查询等。当然,每行都有不同的城市和国家代码,这就是我想要捕获的 表名为dbo.ManagedEntityProperty,列名为PropertyXML 192.1

我试图解析一个XML字段,它是SCOM 2007数据仓库数据库的一部分,并且发现了许多示例,这些示例显示了实现这一点的类似场景,但是没有任何内容返回值,通常是在我运行查询时返回值

这里是一个例子,大约一千行中的一行我需要对其运行,其中我想输入值England和UK。组成标记的GUID对于每个数据类型都是一致的,所以永远不会更改,可以用于查询等。当然,每行都有不同的城市和国家代码,这就是我想要捕获的

表名为dbo.ManagedEntityProperty,列名为PropertyXML

192.168.1.0 WASPDC01.LIV10.Local 192.168.1.0 英格兰 255.255.255.0 英国 忙碌的
有什么建议或指导吗?我尝试按照实现建议,但我仍处于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,然后进行筛选。知道我的意思吗?