与where子句的SQL Server
问题描述:
我在SQL Server中的XML存储与结构如下选择XML元素:与where子句的SQL Server
<ecHeaderData>
<FirstVersionSource>System1</FirstVersionSource>
<DMSEntryUserID>jsmith</DMSEntryUserID>
</ecHeaderData>
我想返回所有行DMSEntryUserID不是空白。我想在查询中选择FirstVersionSource和DMSEntryuserID。
事情是这样的:
select deal_jacket_xml('/ecHeader/FirstVersionSource') as FirstVersionSource,
deal_jacket_xml('/ecHeader/DMSEntryUserID') as DMSEntryUserID
from deal_jacket_xml
where deal_jacket_xml('NotBlank(/ecHeader/DMSEntryUserID'))=1
order by [deal_jacket_xml_id] desc
答
这里是我想出了。关键是[1]的括号和索引规格:
select distinct deal_jacket_xml.value('(/eContractingData/ecHeaderData/FirstVersionSource)[1]', 'nvarchar(max)') as FirstVersionSource
from deal_jacket_xml
where deal_jacket_xml.value('(/eContractingData/ecHeaderData/FirstVersionSource)[1]', 'nvarchar(max)') is not null
AND deal_jacket_xml.value('(/eContractingData/ecHeaderData/DMSEntryUserID)[1]', 'nvarchar(max)') is not null
+0
这可能会做得更好(在性能上)......你的XML片段是整个结构和你在表格的许多行中重复了这个操作,或者你有许多重复节点的XML,你必须挑选其中的一些? – Shnugo
+0
XML结构是巨大的。该片段只是一小部分。每行都有一个巨大的XML结构。 –
你的问题没有什么意义。阅读[xml数据类型方法](https://msdn.microsoft.com/en-us/library/ms190798.aspx)首先 –