与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 
+0

你的问题没有什么意义。阅读[xml数据类型方法](https://msdn.microsoft.com/en-us/library/ms190798.aspx)首先 –

这里是我想出了。关键是[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结构。 –