Как разобрать XML в SQL Server - PullRequest
       39

Как разобрать XML в SQL Server

0 голосов
/ 07 октября 2019

Я импортировал XML-файл в базу данных и хочу прочитать его с разбором полей. Но я делаю что-то не так, потому что выходные поля являются нулевыми.

это файл XML:

    <Messages>
      <Message xmlns="urn:xsd:messaging">
        <Identifier>
          <SUmid>34F166fjD90</SUmid>
          <PassiveLockToken>9REU+IMkCqM=</PassiveLockToken>
          <TableId>200936</TableId>
          <ArchiveName>sd618</ArchiveName>
        </Identifier>
        <ValidationRequested>MAXIMUM</ValidationRequested>
        <ValidationPassed>MAXIMUM</ValidationPassed>
        <Class>NORMAL</Class>
        <TextReadonly>false</TextReadonly>
        <DeleteInhibited>false</DeleteInhibited>
        <TextModified>false</TextModified>
        <Partial>false</Partial>
        <Status>COMPLETED</Status>
        <Instance>
          <Identifier>
            <SUmid>34F166fjD90</SUmid>
            <Number>0</Number>
          </Identifier>
          <Type>ORIGINAL</Type>
          <NotificationType>NONE</NotificationType>
          <Status>COMPLETED</Status>
          <RelatedNumber>0</RelatedNumber>
          <AppendixSequenceNumber>0</AppendixSequenceNumber>
          <UnitName>ETHNALTX</UnitName>
          <MpfnName>mpa</MpfnName>
          <ProcessState>0</ProcessState>
          <LastMpfnResult>SUCCESS</LastMpfnResult>
          <RelativeReference>0</RelativeReference>
          <Priority>7</Priority>
          <DeferredTime>2001-12-13T22:41:36.000+02:00</DeferredTime
    </Message>

- здесь я выбрал только некоторые поля, например, но все поля XML должныбыть прочитанным -


     USE OPENXMLTesting
        GO

        DECLARE @XML AS XML, @hDoc AS INT, @SQL NVARCHAR (MAX)

        SELECT @XML = XMLData FROM XMLwithOpenXML

        EXEC sp_xml_preparedocument @hDoc OUTPUT, @XML

        SELECT Identifier,
        SUmid,
        PassiveLockToken 

        FROM OPENXML (@hDoc, 'Messages')

        WITH 
        (
        Identifier varchar(50) 'Messages/Message/Identifier',
        SUmid [varchar](50) 'Messages/Message/Identifier/@SUmid',
        PassiveLockToken [varchar](100) 'Messages/Message/Identifier/@PassiveLockToken'
        )

        EXEC sp_xml_removedocument @hDoc
        GO

...