从存储在XML数据类型中的XML查询属性和节点值

时间:2011-06-01 20:13:04

标签: sql-server xml tsql

我已经编写了一个与CubeIQ BlackBox(www.magiclogic.com)进行交互的界面,我有一个SQL Server 2005数据库表,我在其中存储了一些常规文本字段,日期和两个XML。 XML数据类型。

我想从XML中选择一些值,我无法弄清楚如何查询XML或该XML中节点的属性。

以下是我想要执行的查询类型:

 SELECT 
    [regular_table_field1],
    [regular_table_field2],
    [opt_resposne_xml].rootnode.wrapper.child@attr('someattribute') AS 'someattribute',
    [opt_resposne_xml].rootnode.wrapper.child@attr('someattribute2') AS 'someattribute2'
 FROM [optimizations] WHERE [opt_concept_id] = '1234'

1 个答案:

答案 0 :(得分:2)

不知道您的XML是什么样的,这里是一段通用的代码,可以让您了解它的外观:

 SELECT 
    [regular_table_field1],
    [regular_table_field2],
    [opt_resposne_xml].value('(/rootnode/wrapper/child/@someattribute)[1]', 'int') AS 'someattribute',
    [opt_resposne_xml].value('(/rootnode/wrapper/child/@someattribute2)[1]', 'varchar(50)') AS 'someattribute2'
 FROM 
     [optimizations] 
 WHERE 
     [opt_concept_id] = '1234'

如果您需要“进入”XML列并获取单个值(来自XML元素或属性),您基本上需要将XPath定义到您感兴趣的信息所在的位置,您需要将其转换为给定的SQL Server数据类型。

如果您需要将单个关系行与单个XML字段中的多个元素交叉连接,则可能需要其他方法(CROSS APPLY)。

另外:您可能需要注意所涉及的XML命名空间 - 这是尝试解析SQL Server中的XML时常见的陷阱。