【发布时间】:2017-09-27 16:09:27
【问题描述】:
是否可以编写 WHERE 子句根据子节点的值从 XML 中选择值?
示例 XML
<Message>
<PrimaryKeyValue>12345</PrimaryKeyValue>
<Events>
<UpdatedDefaultAddress>True</UpdatedDefaultAddress>
<UpdatedCustomerName>False</UpdatedCustomerName>
</Events>
</Message>
<Message>
<PrimaryKeyValue>67890</PrimaryKeyValue>
<Events>
<UpdatedDefaultAddress>False</UpdatedDefaultAddress>
<UpdatedCustomerName>True</UpdatedCustomerName>
</Events>
</Message>
我的问题
如何构造一个查询以仅选择 <UpdatedDefaultAddress> 的值为“True”的 PrimaryKeyValues?
我当前的代码
SELECT
t.c.value('(PrimaryKeyValue)[1]', 'varchar(100)') AS PrimaryKeyValue
FROM @message_body.nodes('Message') as T(C)
WHERE t.c.exist('./Events/UpdateDefaultAddress') = 'True'
问题在于我在结果中返回了两个 PrimaryKeyValues - 我认为代码是检查 <UpdatedDefaultAddress> 是否存在,而不是其中包含的值?
【问题讨论】:
标签: sql sql-server xml tsql xquery