2016-04-11 7 views
1

私は、APIサービスの発信XMLを格納するテーブル列を持っています。通常XMLタグをSQL Serverで親タグを指定せずにクエリできますか?

<?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を照会したい:

<personId>1</personId> 

問題は、彼らのような別のトランザクションから来ると、親タグは、矛盾している:私は、たとえば、すべてのレコードを検索する必要があります

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 

レベルは知っていますが、親の名前iあなたはアスタリスクを使用するかもしれません。

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

それは完璧に、ありがとう! – user2078938

関連する問題