簡體   English   中英

使用SQL提取XML中的根節點名稱

[英]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);

DBFiddle演示


編輯:

或使用.query()方法:

SELECT sub.data.query('local-name(/*[1])') AS root_name, sub.*
FROM #xmldata sub;

DBFiddle演示2


編輯2:

@Shnugo所述,您可以使用不帶.nodes() .value()方法:

SELECT sub.data.value('local-name((/*)[1])','varchar(100)') AS root_name, sub.*
FROM #xmldata sub;

DBFiddle演示3

這是一個用於在屏幕截圖中創建表格的(正確)腳本。 該查詢顯示如何從每一行中選擇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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM