2016-04-11 27 views
1

我有用於存儲API服務的傳出XML的表列。我需要搜索所有記錄,例如:我可以在沒有在SQL Server中指定它的父標籤的情況下查詢XML標籤嗎?

<personId>1</personId> 

問題是父標籤不一致,因爲他們來自不同的事務,如:

<?xml version="1.0" encoding="utf-8"?> 
<order> 
    <personId>1</personId> 
</order> 

<?xml version="1.0" encoding="utf-8"?> 
<query> 
    <personId>1</personId> 
</query> 

通常情況下,我想查詢XML以下方式:

where xmlValue.value('(order/personId)[1]', 'int') = 1 

有沒有辦法查詢xml值而不指定父標記?

回答

3

如果「PERSONID」不會發生在其他地方,你可能會去最簡單的方式與

where xmlValue.value('(//personId)[1]', 'int') = 1 

要嘗試一下:

DECLARE @tbl TABLE(ID INT,xmlCol XML); 
INSERT INTO @tbl VALUES 
(1,'<?xml version="1.0" encoding="utf-8"?> 
<order> 
    <personId>1</personId> 
</order>') 
,(2,'<?xml version="1.0" encoding="utf-8"?> 
<query> 
    <personId>2</personId> 
</query>'); 

如果你不知道你的XML樹一個節點位於你可能使用的雙斜槓「//」

SELECT * 
FROM @tbl AS tbl 
WHERE xmlCol.value('(//personId)[1]','int')=2 

如果你知道的級別,但父母的名字我不同的,你可以使用星號

SELECT * 
FROM @tbl AS tbl 
WHERE xmlCol.value('(/*/personId)[1]','int')=1 
+0

完美的工作,謝謝! – user2078938

相關問題