SQL使用存储过程和XML参数插入多行?[英] SQL Insert multiple rows using stored procedure and xml parameter?

本文是小编为大家收集整理的关于SQL使用存储过程和XML参数插入多行?的处理/解决方法,可以参考本文帮助大家快速定位并解决问题,中文翻译不准确的可切换到English标签页查看源文。

问题描述

我之前曾使用过一个值的参数,但是我不确定如何使用XML.

我不知道格式化XML的最佳方法,但我想我会尝试的:

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

然后,我将XML(一辆或多个汽车)传递到存储过程中,并且它将为我通过的每辆车插入一行(名称以名称列等.)

)

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

推荐答案

您可以使用节点函数切碎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>'

其他推荐答案

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>'

本文地址:https://itbaoku.cn/post/2786893.html

问题描述

I've used a table valued parameter before, but I'm not sure how to use xml.

I do not know the best way to format my xml but I think I would try this:

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

Then I would pass the xml (one or more car) to the stored procedure and it would insert one row for each car I pass (with the name going in a name column etc..)

Does anyone know how to write the stored procedure? (I'd usually try it myself but I don't have much time for testing T_T)

推荐答案

You can shred the XML using the nodes function:

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>'

其他推荐答案

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>'