我是在SQL服务器中使用XML的新手,我正在努力获得我需要的东西。我尝试过从网站周围的一些例子到我需要但没有运气,任何帮助将不胜感激我的原始XML如下
<?xml version="1.0" encoding="utf-8"?>
<Service xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<mParentServiceServiceID>37694</mServiceID>
<mJourneyMessage>Cancelled</mJourneyMessage>
<mApplicableDate>2014-10-10</mApplicableDate>
<Edits>
<mServiceID>14466</mServiceID>
<mStopSequenceOrdinal>2</mStopSequenceOrdinal>
</Edits>
<Edits>
<mServiceID>14466</mServiceID>
<mStopSequenceOrdinal>3</mStopSequenceOrdinal>
</Edits>
<Edits>
<mServiceID>14467</mServiceID>
<mStopSequenceOrdinal>5</mStopSequenceOrdinal>
</Edits>
<Edits>
<mServiceID>14467</mServiceID>
<mStopSequenceOrdinal>4</mStopSequenceOrdinal>
</Edits>
<Edits>
<mServiceID>14468</mServiceID>
<mStopSequenceOrdinal>4</mStopSequenceOrdinal>
</Edits>
</mEdits>
</Service>
通过名为@Details
的XML变量将其传递到存储过程我希望我的表格如下所示
mParentServiceID|mJourneyMessage|mApplicableDate|mServiceID|mStopsSequenceOrdinal
37694 Cancelled 2014-10-10 14466 2
37694 Cancelled 2014-10-10 14466 3
37694 Cancelled 2014-10-10 14467 5
37694 Cancelled 2014-10-10 14467 4
37694 Cancelled 2014-10-10 14468 4
我知道这不是规范化的,但这是一个临时表,以便我可以在存储到主表之前进行一些数据操作
到目前为止,我有以下
INSERT INTO @ApplicableServices
SELECT *
FROM OPENXML (@Details, '/Service/', 2)
WITH (mParentServiceServiceID int '../@SmParentServiceServiceID',
mJourneyMessage varchar(30) '../@mJourneyMessage ',
mApplicableDate Date '../@mApplicableDate',
mServiceID int '@mServiceID ',
mStopSequenceOrdinal int '@mStopSequenceOrdinal')
非常感谢
答案 0 :(得分:0)
试试这个(顺便说一下,xml中有一些语法错误,所以我不得不做一些修改,所以我在下面全部列出了它):
DECLARE @XML XML =
'<?xml version="1.0" encoding="utf-8"?>
<Service xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<mParentServiceServiceID>37694</mParentServiceServiceID>
<mJourneyMessage>Cancelled</mJourneyMessage>
<mApplicableDate>2014-10-10</mApplicableDate>
<Edits>
<mServiceID>14466</mServiceID>
<mStopSequenceOrdinal>2</mStopSequenceOrdinal>
</Edits>
<Edits>
<mServiceID>14466</mServiceID>
<mStopSequenceOrdinal>3</mStopSequenceOrdinal>
</Edits>
<Edits>
<mServiceID>14467</mServiceID>
<mStopSequenceOrdinal>5</mStopSequenceOrdinal>
</Edits>
<Edits>
<mServiceID>14467</mServiceID>
<mStopSequenceOrdinal>4</mStopSequenceOrdinal>
</Edits>
<Edits>
<mServiceID>14468</mServiceID>
<mStopSequenceOrdinal>4</mStopSequenceOrdinal>
</Edits>
</Service>'
SELECT
Serv.Edit.value('../mParentServiceServiceID[1]','INT') mParentServiceServiceID
,Serv.Edit.value('../mJourneyMessage[1]','VARCHAR(50)') mJourneyMessage
,Serv.Edit.value('../mApplicableDate[1]','DATE') mApplicableDate
,Serv.Edit.value('mServiceID[1]','INT') mServiceID
,Serv.Edit.value('mStopSequenceOrdinal[1]','INT') mStopSequenceOrdinal
FROM
@XML.nodes ('//Edits') AS Serv(Edit)