通过 sql 查询读取 xml

Read xml through sql query

我已将 xml 字符串传递给存储过程,需要将 xml 值插入 sql 数据库 table。下面是脚本

Declare @tab1 table(id int , name varchar(20),Salary int)
declare @xml xml

set @xml = '<Models>
               <Model_Id ID="54">
                   <Data>
                       <Name>Nandani</Name>
                       <Salary>1000</Salary>
                   </Data>
                   <Data>
                       <Name>Amit</Name>
                       <Salary>5000</Salary>
                   </Data>
               </Model_Id>
               <Model_Id ID="55">
                   <Data>
                   <Name>Pankaj</Name>
                   <Salary>2000</Salary>
                   </Data>
               </Model_Id>
           </Models>'

insert into @tab1(id, name, Salary) 
   SELECT 
      doc.col.value('(Model_Id/@ID)[1]', 'INT'),
      doc.col.value('(Model_Id/Data/Name)[1]', 'VARCHAR(20)'),    
      doc.col.value('(Model_Id/Data/Salary)[1]','Varchar(50)')   

但是它只是在table中插入了一条记录,但是table中应该有3条记录。请帮我解决这个问题。

试试这个:

INSERT INTO @tab1(id, name, Salary) 
   SELECT 
      xc.value('(../@ID)[1]', 'INT'),
      xc.value('(Name)[1]', 'VARCHAR(20)'),    
      xc.value('(Salary)[1]','Varchar(50)')   
   FROM
      @xml.nodes('/Models//Model_Id//Data') AS XT(XC)

通过调用 .nodes(),您将返回 "pseudo" table 个 XML 片段,每个 XML 元素一个由 XPath 表达式指定。然后,您将 .value() 调用应用于每个 XML 片段以提取单个属性和元素值。