簡體   English   中英

T-SQL將XML字符串轉換為表數據

[英]T-SQL converting XML string to table data

我是將XML字符串轉換為SQL Server表的新手。 當我執行以下代碼時,它將在Management Studio的結果窗口中生成表格數據。 如果我嘗試取消注釋插入行,則會出現查詢錯誤。 我創建的表如下所示:

在此處輸入圖片說明

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 

您需要在表格名稱前加上[]

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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM