2017-08-02 45 views
-1
  1. 我有一個帶有xml列的表。
  2. 我需要在該列的所有節點和值中搜索該子列。搜索應區分各行中的XML敏感
  3. 結構是不同的

我用下面的查詢要做到這一點,在XML列中使用sql server查找字符串

這個作品是短XML行,如果行的長度變爲巨大它不能處理這種情況。只搜索了部分數據。

建議我採用其他一些方法來實現。

回答

1

如果這是一次任務,然後我會用這樣exist XML方法:

DECLARE @Table1 TABLE (
    ID INT IDENTITY PRIMARY KEY, 
    CommentAsXML XML 
) 

INSERT @Table1 (CommentAsXML) 
VALUES (N'<root><item /><item type="Reg">0001</item><item type="Inv">B007</item><item type="Cus">A0001</item><item type="Br">F0001</item></root>') 
INSERT @Table1 (CommentAsXML) 
VALUES (N'<root><item /><item type="Reg">0005</item><parent><child>B007</child></parent><item type="Br">F0005</item></root>') 
INSERT @Table1 (CommentAsXML) 
VALUES (N'<root><item /><item type="Reg">0005</item></root>') 

-- Following query is searching for B007 within InnerText of all XML elements: 
SELECT * 
FROM @Table1 t 
WHERE t.CommentAsXML.exist('//*[lower-case(text()[1]) eq "b007"]') = 1 

結果:

ID CommentAsXML 
-- ------------------------------------------------------------------------------------------------------------------------------ 
1 <root><item type="Reg">0001</item><item type="Inv">B007</item><item type="Cus">A0001</item><item type="Br">F0001</item></root> 
2 <root><item type="Reg">0005</item><parent><child>B007</child></parent><item type="Br">F0005</item></root> 

另外,如果你想搜索的XML atrributes'值一些文本那麼可以使用以下XQuery:

SELECT * 
FROM @Table1 t 
WHERE t.CommentAsXML.exist('//@*[lower-case(.) eq "reg"]') = 1 

注意:在這兩種情況下,字符串con stants(ex。 「reg」)應該是小寫。

+0

雅我遇到過存在的方法。但區分大小寫。任何方式搜索不區分大小寫? – vignesh

+0

@vignesh:查看更新的解決方案:您可以使用「小寫」(或「大寫」)XQuery函數。 –

相關問題