[英]Extracting the name of the root node in XML using SQL
在下表中,
有沒有一種方法可以使用SQL Server從“ XML_data”列中提取根節點“ Main”的名稱?
更新:
DECLARE @ProdID int
create table #xmldata(id int,data xml)
insert into #xmldata
select
id = '011',
data = '<Root>
<ProductDescription ProductID="1" ProductName="Road Bike">
<Features>
<Warranty>1 year parts and labor</Warranty>
<Maintenance>3 year parts and labor extended maintenance is available</Maintenance>
</Features>
</ProductDescription>
</Root>'
select * from #xmldata
SET @ProdID = #xmldata.data.value('(/Root)[1]', 'varchar' )
SELECT @ProdID
drop table #xmldata
有沒有一種方法可以使用SQL Server從“ XML_data”列中提取根節點“ Main”的名稱?
對的,這是可能的:
SELECT s.c.value('local-name(.)','varchar(100)') AS root_name, sub.*
FROM #xmldata sub
CROSS APPLY sub.data.nodes('/*') s(c);
或使用.query()
方法:
SELECT sub.data.query('local-name(/*[1])') AS root_name, sub.*
FROM #xmldata sub;
如@Shnugo所述,您可以使用不帶.nodes()
.value()
方法:
SELECT sub.data.value('local-name((/*)[1])','varchar(100)') AS root_name, sub.*
FROM #xmldata sub;
這是一個用於在屏幕截圖中創建表格的(正確)腳本。 該查詢顯示如何從每一行中選擇name
節點的值:
DROP TABLE IF EXISTS #xmldata;
CREATE TABLE #xmldata
(
cid INT,
cidtype CHAR,
xml_data XML
);
INSERT #xmldata SELECT 1001,'N','<Main><ID>1001</ID><details><name>John</name><age>12</age></details></Main>';
INSERT #xmldata SELECT 1001,'N','<Main><ID>1003</ID><details><name>Diane</name><age>25</age></details></Main>';
INSERT #xmldata SELECT 1001,'N','<Main><ID>1004</ID><details><name>Kippy</name><age>26</age></details></Main>';
SELECT xml_data.value('(/Main/details/name)[1]','varchar(100)') AS [name]
FROM #xmldata;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.