2016-06-13 148 views
0

我在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)首先 –

回答

0

這裏是我想出了。關鍵是[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結構。 –