T-SQL преобразовывает строку XML в данные таблицы - PullRequest
0 голосов
/ 02 мая 2018

Я новичок в преобразовании строк XML в таблицы SQL Server. Когда я выполняю следующий код, он создает табличные данные в окне результатов Management Studio. Если я попытаюсь раскомментировать вставку в строку, ошибки запроса. Таблица, которую я создал, выглядит так:

enter image description here

И T-SQL это (я не уверен, что я делаю неправильно):

DECLARE @XML XML

SET @XML = '
    <Codes>
      <Code>
        <TranCode>09764812</TranCode>
        <TranDescr>WP FBCCP ADJUSTMENT</TranDescr>
        <PosTranCode>77724</PosTranCode>
        <NegTranCode>88820</NegTranCode>
      </Code>
      <Code>
        <TranCode>09764804</TranCode>
        <TranDescr>WP FBCCP CRM</TranDescr>
        <PosTranCode>77724</PosTranCode>
        <NegTranCode>88820</NegTranCode>
      </Code>
      <Code>
        <TranCode>09764804</TranCode>
        <TranDescr>WP FBCCP CRM</TranDescr>
        <PosTranCode>77724</PosTranCode>
        <NegTranCode>88820</NegTranCode>
      </Code>
    </Codes>'

DECLARE @handle INT  
DECLARE @PrepareXmlStatus INT  

EXEC @PrepareXmlStatus= sp_xml_preparedocument @handle OUTPUT, @XML  

--INSERT INTO 670_TransCodes (TranCode,TranDescr,PosTranCode,NegTranCode)
    SELECT TranCode,TranDescr,PosTranCode,NegTranCode
    FROM OPENXML(@handle, '/Codes/Code', 2)  
        WITH (
        TranCode varchar(20) 'TranCode',
        TranDescr varchar(50) 'TranDescr',
        PosTranCode INT 'PosTranCode',
        NegTranCode INT 'NegTranCode'
        )

    EXEC sp_xml_removedocument @handle 

1 Ответ

0 голосов
/ 02 мая 2018

Вам нужно окружить имя таблицы []

INSERT INTO [670_TransCodes] (TranCode,TranDescr,PosTranCode,NegTranCode)

Я бы использовал xml node метод вместо

INSERT INTO [670_TransCodes] (TranCode,TranDescr,PosTranCode,NegTranCode)
select a.value('TranCode[1]', 'varchar(20)') as TranCode,
       a.value('TranDescr[1]', 'varchar(50)') as TranDescr,
       a.value('PosTranCode[1]', 'INT') as TranDescr,
       a.value('NegTranCode[1]', 'INT')  as NegTranCode    
from @XML.nodes('/Codes/Code') as t(a);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...