SQL使用存储过程和xml参数插入多行?

时间:2009-12-18 15:48:37

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

之前我使用过表值参数,但我不知道如何使用xml。

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

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

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

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

2 个答案:

答案 0 :(得分:6)

您可以使用节点功能来粉碎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>'

答案 1 :(得分:1)

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