SQL Вставить несколько строк с помощью хранимой процедуры и параметра XML? - PullRequest
1 голос
/ 18 декабря 2009

Ранее я использовал параметр с табличным значением, но я не уверен, как использовать xml.

Я не знаю лучший способ отформатировать мой XML, но я думаю, что я бы попробовал это:

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

Затем я передаю xml (одну или несколько машин) в хранимую процедуру, и он вставляет по одной строке для каждой машины, которую я прохожу (с именем в столбце имени и т. Д.)

Кто-нибудь знает, как написать хранимую процедуру? (Я бы сам попробовал, но у меня не так много времени для тестирования T_T)

Ответы [ 2 ]

6 голосов
/ 18 декабря 2009

Вы можете уничтожить 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 голос
/ 04 октября 2011
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>'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...