2014-10-10 65 views
0

我是在SQL服务器内使用XML的新手,并且为了得到我所需要的而苦苦挣扎。我曾试图努力从工地附近的几个例子为我所需要的,但没有运气,任何帮助,将不胜感激我的原始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> 

这是正在通过所谓的XML变量传递到存储过程@Details

我想我的表如下所示

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

试试这个(顺便说一下,有一对夫妇在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)