【问题标题】:SQL Insert multiple rows using stored procedure and xml parameter?SQL使用存储过程和xml参数插入多行?
【发布时间】:2009-12-18 15:48:37
【问题描述】:

我之前用过表值参数,但是不知道怎么用xml。

我不知道格式化我的 xml 的最佳方式,但我想我会试试这个:

<Car>  
   <Name>BMW</Name>  
   <Color>Red</Color>  
</Car>

然后我会将 xml(一辆或多辆汽车)传递给存储过程,它会为我通过的每辆汽车插入一行(名称放在名称列等中)

有谁知道如何编写存储过程? (我通常会自己尝试,但我没有太多时间测试T_T)

【问题讨论】:

    标签: sql sql-server sql-server-2005 tsql stored-procedures


    【解决方案1】:

    您可以使用节点函数粉碎 XML:

    CREATE PROC ShredXML (@x xml)
    AS BEGIN
        INSERT INTO TBL_TARGET (Name, Color)
        SELECT 
            x.y.value( 'Name[1]', 'VARCHAR(20)' ) AS Name,
            x.y.value( 'Color[1]', 'VARCHAR(20)' ) AS Color
        FROM @x.nodes('cars/car') x(y)
    END
    
    
    exec ShredXML @x = N'<cars><car><Name>BMW</Name><Color>Red</Color></car><car><Name>Audi</Name><Color>Green</Color></car></cars>'
    

    【讨论】:

      【解决方案2】:
      alter PROC ShredXML (@x xml) 
      AS 
      BEGIN
      If not exists (Select * from TBL_TARGET )
      begin   
       INSERT INTO TBL_TARGET (Name, Color)
           SELECT x.y.value( 'Name[1]', 'VARCHAR(20)' )AS Name,x.y.value( 'Color[1]','VARCHAR(20)')AS Color FROM @x.nodes('cars/car') x(y)
      end 
      END   
      exec ShredXML @x = N'<cars><car><Name>BMW</Name><Color>Red</Color></car><car><Name>Audi</Name><Color>Green</Color></car></cars>'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-10
        • 2016-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多