【问题标题】:How to loop and parse xml parameter in sql server stored procedure如何在sql server存储过程中循环和解析xml参数
【发布时间】:2011-04-22 17:21:23
【问题描述】:

我想编写一个接受 XML 参数的存储过程,解析它的元素并将它们插入到表中。这是我的 XML:

我想循环输入该参数(例如 C# 中的 foreach),检索每个人,然后解析它的数据(ID、NAME、LASTNAME),然后将它们插入一个有 3 个字段的表中。

怎么做?

【问题讨论】:

    标签: xml sql-server-2005 sql-server-2008 linq-to-xml


    【解决方案1】:

    试试这个说法:

    SELECT
       Pers.value('(ID)[1]', 'int') as 'ID',
       Pers.value('(Name)[1]', 'Varchar(50)') as 'Name',
       Pers.value('(LastName)[1]', 'varchar(50)') as 'LastName'
    FROM
       @YourXml.nodes('/Employees/Person') as EMP(Pers)
    

    这为您提供了该数据的良好行/列表示。

    当然,您可以将其扩展为 INSERT 语句中的第二部分:

    INSERT INTO dbo.YourTargetTable(ID, Name, LastName)
      SELECT
         Pers.value('(ID)[1]', 'int') as 'ID',
          Pers.value('(Name)[1]', 'Varchar(50)') as 'Name',
         Pers.value('(LastName)[1]', 'varchar(50)') as 'LastName'
      FROM
         @YourXml.nodes('/Employees/Person') as EMP(Pers)
    

    完成 - 不需要循环或游标或任何可怕的东西! :-)

    【讨论】:

    • 嗨@mar​​c_s,您能否解释一下上述插入语句中的这一行:@YourXml.nodes('/Employees/Person') as EMP(Pers)?是否有一个 MSDN 页面可以让我了解这种语法?谢谢。
    • @Tom: MSDN : XQuery Language Reference - 它基本上将 XML “分解”为 XML 片段的伪表 - 每个 XML 元素对应一个与该 XPath 表达式匹配的 XML 元素(每个 <Person> 一个“行” <Employees> 下的元素)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 2020-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多