Sql server 将EDI X12 835 XML解析到SQL Server中的表中

Sql server 将EDI X12 835 XML解析到SQL Server中的表中,sql-server,xml,edi,x12,Sql Server,Xml,Edi,X12,我一直在尝试将835XML解析到一个表中。我正在使用以下代码 Declare @XML XML SET @XML = (SELECT * FROM OPENROWSET(BULK 'C:\835\XML\Processremitcombined.xml', SINGLE_BLOB) AS data) Declare @NoClaims Int INSERT INTO tblX12835_Copy(BPR_Payment, BPR_EffectiveEntryDat

我一直在尝试将835XML解析到一个表中。我正在使用以下代码

Declare @XML XML

SET @XML = (SELECT *
            FROM OPENROWSET(BULK 'C:\835\XML\Processremitcombined.xml', SINGLE_BLOB) AS data)

 Declare @NoClaims Int

INSERT INTO tblX12835_Copy(BPR_Payment, BPR_EffectiveEntryDate , TRn_TraceNumber, N1_HospiceNPI ,NM1_Patientlastname, NM1_PatientFirstName, NM1_HIC, DTM_claimDate)
    SELECT
        -- X.product.query('National_Provider_Identifier').value('.', 'INT'),
        X.Product.query('Loop/Loop/CLP/CLP04').value('.', 'nvarchar(max)')' ',
        X.Product.query('BPR/BPR16').value('.', 'datetime'),
        X.Product.query('TRN/TRN02').value('.', 'nvarchar(25)'),
        X.product.query('Loop/N1/N104').value('.', 'nvarchar(25)'),
        X.product.query('Loop/Loop/NM1/NM103').value('.', 'nvarchar(max)'),
        X.product.query('Loop/Loop/NM1/NM104').value('.', 'nvarchar(max)')' ',
        X.product.query('Loop/Loop/NM1/NM109').value('.', 'nvarchar(max)')' ',
        X.product.query('Loop/Loop/DTM/DTM02').value('.', 'nvarchar(max)')' '
    FROM 
        @XML.nodes('/Interchange/Interchange/FunctionGroup/Transaction') AS X(Product)

唯一的问题是,存在多个嵌套循环,其中包含同一医疗机构的多个患者信息。因此,当我的例程提取该数据并将其插入到表中时,列(如patientFirstname)包含该循环中的所有名称。我想迭代这些循环,并将每个患者的信息作为单独的记录提取。

这就是翻译软件存在的原因。您可以使用835并将其直接转储到SQL。现在,您正在将其解析为XML,然后转换为SQL,灵活性很低。多个故障点,需要维护的批次。为了保持您的范例,您可能必须返回并为每个迭代创建一个XML节点,以便它在SQL端创建记录。这就是翻译软件存在的原因。您可以使用835并将其直接转储到SQL。现在,您正在将其解析为XML,然后转换为SQL,灵活性很低。多个故障点,需要维护的批次。为了保持您的范例,您可能必须返回并为每个迭代创建一个XML节点,以便它在SQL端创建记录。