SQL 解析XML

IF EXISTS (SELECT 1 
                  FROM sysobjects 
                  WHERE name='pd_invoice_save'
                  AND type ='P')
   DROP PROC pd_invoice_save
go

CREATE PROC pd_invoice_save
(
    @TradeType VARCHAR(16), --10挂号 20门诊 30住院
    @TradeID   VARCHAR(64),
    @XMLValue XML
)

WITH  ENCRYPTION 
AS
DECLARE @ParaTable TABLE 
(
        binvkind   varchar(200)  ,-- 数值  2  0 varchar(200)  ,--专用发票、2 –普通发票、11 varchar(200)  ,--货运发票、41 varchar(200)  ,--卷票普通发票、51 varchar(200)  ,--电子普通发票 
        binvcode   varchar(200)  ,--字符  10  发票代码 
        binvnr   varchar(200)  ,--数值    发票号码 
        binvdate   varchar(200)  ,--日期    开票日期 
        bmachinenr   varchar(200)  --字符  3  开票机号 
)
;WITH XMLNAMESPACES(DEFAULT 'http://www.XXXXXX.com.cn')          --有命名空间的,在这里带上命名空间
INSERT INTO @ParaTable
        ( 
           binvkind   ,            --数值  2  0 ,         --专用发票、2 –普通发票、11 ,         --货运发票、41 ,         --卷票普通发票、51 ,         --电子普通发票 
            binvcode   ,            --字符  10  发票代码 
            binvnr   ,              --数值    发票号码 
            binvdate   ,            --日期    开票日期 
            bmachinenr           --字符  3  开票机号 
                   
        )
SELECT   T.d.value('(binvkind/value/text())[1]','varchar(256)')  AS binvkind,  --节点里面还可以在嵌套节点
          T.d.value('(binvcode/text())[1]','varchar(256)') AS  binvcode,
          T.d.value('(binvnr/text())[1]','varchar(256)') AS binvnr ,
          T.d.value('(binvdate/text())[1]','varchar(256)') AS  binvdate,
          T.d.value('(bmachinenr/text())[1]','varchar(256)') AS bmachinenr 
        
  FROM @XMLValue.nodes('siiscmd/sendbackinv/sendbackinvrecord/sendbackinvrecordhead') AS T(d)
  
SELECT * FROM @ParaTable



原文地址:https://www.cnblogs.com/tanhu/p/8117982.html