[英]xml parameter in sql server stored procedure
我想編寫一個存儲過程,接受一個XML參數,解析它的元素,然后將它們插入表SQL中。 這是我的XML:
<Lines>
<Line>
<roomlist>
<room>
<namehotel>MeSa</namehotel>
<typeroom>506671</typeroom>
<typeroomname>Dbl Standard - Tip</typeroomname>
<roomnumber>0</roomnumber>
<priceroom>444.60</priceroom>
<costroom>400.00</costroom>
<boardtype/>
<paxes>
<pax>
<name>EU</name>
<lastname>CADO</lastname>
<typepax>Adult</typepax>
</pax>
<pax>
<name>LIN</name>
<lastname>BAC</lastname>
<typepax>Adult</typepax>
</pax>
</paxes>
</room>
</roomlist>
</Line>
</Lines>
那怎么辦
嘗試這個
CREATE PROCEDURE P_NAME(V_XML_STRING VARCHAR(MAX))
AS
BEGIN
DECLARE @XML AS XML;
SELECT @XML = CAST(V_XML_STRING as XML)
;with numDim as
(
select number
from master..spt_values
where type = 'P'
)
-- INSERT INTO TABLENAME (COLS LIST HERE ...)
select
y.value('namehotel[1]', 'varchar(50)') as namehotel,
y.value('typeroom[1]', 'varchar(50)') as typeroom,
y.value('typeroomname[1]', 'varchar(50)') as typeroomname,
y.value('roomnumber[1]', 'numeric(10)') as roomnumber,
y.value('priceroom[1]', 'numeric(10,2)') as priceroom,
y.value('costroom[1]', 'numeric(10,2)') as costroom,
y.value('boardtype[1]', 'varchar(50)') as boardtype,
y.value('(paxes/pax[position()=sql:column("N.Number")]/name)[1]',
'varchar(50)') as Pax_name,
y.value('(paxes/pax[position()=sql:column("N.Number")]/lastname)[1]',
'varchar(50)') as Pax_lastname,
y.value('(paxes/pax[position()=sql:column("N.Number")]/typepax)[1]',
'varchar(50)') as Pax_typepax
from @xml.nodes('/Lines/Line/roomlist/room') as x(y)
cross join numDim as N
where N.number between 1 and (X.Y.value('count(paxes/pax/name)', 'int'))
END;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.