我有一個帶有 XML 列的大型資料庫表。XML 內容是一種檔案,如下所示:
<?int-dov version="1.0" encoding="UTF-8" standalone="no"?>
<ds:datastoreItem ds:itemID="{F8484AF4-73BF-45CA-A524-0D796F244F37}" xmlns:ds="http://schemas.openxmlformats.org/officeDocument/2006/customXml"><ds:schemaRefs><ds:schemaRef ds:uri="http://schemas.openxmlformats.org/officeDocument/2006/bibliography"/></ds:schemaRefs></ds:datastoreItem>
我正在尋找一種在 T-SQL 查詢中獲取獨立屬性值的函式或快速方法。當我運行以下查詢時:
select XmlContent.query('@standalone') from XmlDocuments
我收到此錯誤訊息:
Msg 2390, Level 16, State 1, Line 4
XQuery [XmlDocuments.XmlContent.query()]: Top-level attribute nodes are not supported
所以,如果有人給我解決這個問題的解決方案,我將不勝感激。
uj5u.com熱心網友回復:
您可以使用該processing-instruction()功能來獲得它。
SELECT @xml.value('./processing-instruction("int-dov")[1]','nvarchar(max)')
| 結果 |
|---|
| version="1.0" encoding="UTF-8" standalone="no" |
如果你只想得到這standalone部分,我發現的唯一方法是從中構造一個 XML 節點:
SELECT CAST(
N'<x '
@xml.value('./processing-instruction("int-dov")[1]','nvarchar(max)')
N' />' AS xml).value('x[1]/@standalone','nvarchar(10)'
| 結果 |
|---|
| 不 |
資料庫<>小提琴
uj5u.com熱心網友回復:
只是為了補充@Charlieface 的答案。所有的功勞都歸功于他。
SQL
DECLARE @xml XML =
N'<?int-dov version="1.0" encoding="UTF-8" standalone="no"?>
<ds:datastoreItem ds:itemID="{F8484AF4-73BF-45CA-A524-0D796F244F37}"
xmlns:ds="http://schemas.openxmlformats.org/officeDocument/2006/customXml">
<ds:schemaRefs>
<ds:schemaRef ds:uri="http://schemas.openxmlformats.org/officeDocument/2006/bibliography"/>
</ds:schemaRefs>
</ds:datastoreItem>';
SELECT col.value('x[1]/@standalone','nvarchar(10)') AS [standalone]
, col.value('x[1]/@encoding','nvarchar(10)') AS [encoding]
, col.value('x[1]/@version','nvarchar(10)') AS [version]
FROM (VALUES(CAST(N'<x '
@xml.value('./processing-instruction("int-dov")[1]','nvarchar(max)')
N' />' AS xml))
) AS tab(col);
輸出
------------ ---------- ---------
| standalone | encoding | version |
------------ ---------- ---------
| no | UTF-8 | 1.0 |
------------ ---------- ---------
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/341129.html
標籤:sql-server xml 路径 查询
上一篇:如何合并行中的兩列?
