-1
- 我有一個帶有xml列的表。
- 我需要在該列的所有節點和值中搜索該子列。搜索應區分各行中的XML敏感
- 結構是不同的
我用下面的查詢要做到這一點,在XML列中使用sql server查找字符串
這個作品是短XML行,如果行的長度變爲巨大它不能處理這種情況。只搜索了部分數據。
建議我採用其他一些方法來實現。
我用下面的查詢要做到這一點,在XML列中使用sql server查找字符串
這個作品是短XML行,如果行的長度變爲巨大它不能處理這種情況。只搜索了部分數據。
建議我採用其他一些方法來實現。
如果這是一次任務,然後我會用這樣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」)應該是小寫。
雅我遇到過存在的方法。但區分大小寫。任何方式搜索不區分大小寫? – vignesh
@vignesh:查看更新的解決方案:您可以使用「小寫」(或「大寫」)XQuery函數。 –