2009-12-18 133 views
1

我之前使用過一個表值參數,但我不確定如何使用xml。SQL使用存儲過程和xml參數插入多行?

我不知道來格式化XML的最佳方式,但我想我會嘗試這個辦法:

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

然後我會在XML(一個或多個汽車)傳遞給存儲過程,它會插入我通過的每輛車都有一排(名字在名稱列中等..)

有沒有人知道如何編寫存儲過程? (我通常會盡量自己,但我沒有測試T_T太多時間)

回答

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

好吧,我得到的一切工作正常謝謝您! :d – skid 2009-12-18 17:59:52

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