mssql 解析XML格式到表

 

DECLARE @XML NVARCHAR(MAX);
SET @XML = '<NewDataSet>
    <Table>
        <material_id>1</material_id>
        <material_no>1</material_no>
        <material_name>PP</material_name>
        <isvalid>Y</isvalid>
    </Table>
    <Table>
        <material_id>2</material_id>
        <material_no>2</material_no>
        <material_name>PA6</material_name>
        <isvalid>N</isvalid>
        <upd_date>2021-01-26T22:22:00+08:00</upd_date>
        <upd_user>蔡显洪</upd_user>
    </Table>
    <Table>
        <material_id>3</material_id>
        <material_no>3</material_no>
        <material_name>ADC12</material_name>
        <isvalid>Y</isvalid>
    </Table>
    <Table>
        <material_id>4</material_id>
        <material_no>6</material_no>
        <material_name>橡胶</material_name>
        <isvalid>Y</isvalid>
    </Table>
    <Table>
        <material_id>5</material_id>
        <material_no>7</material_no>
        <material_name>铜</material_name>
        <isvalid>Y</isvalid>
    </Table>
    <Table>
        <material_id>6</material_id>
        <material_no>8</material_no>
        <material_name>铅</material_name>
        <isvalid>Y</isvalid>
    </Table>
    <Table>
        <material_id>7</material_id>
        <material_no>9</material_no>
        <material_name>铁</material_name>
        <isvalid>Y</isvalid>
    </Table>
    <Table>
        <material_id>8</material_id>
        <material_no>10</material_no>
        <material_name>ST12</material_name>
        <isvalid>Y</isvalid>
    </Table>
    <Table>
        <material_id>9</material_id>
        <material_no>11</material_no>
        <material_name>ST14</material_name>
        <isvalid>Y</isvalid>
    </Table>
    <Table>
        <material_id>10</material_id>
        <material_no>12</material_no>
        <material_name>热板</material_name>
        <isvalid>Y</isvalid>
    </Table>
    <Table>
        <material_id>11</material_id>
        <material_no>13</material_no>
        <material_name>40Cr</material_name>
        <isvalid>Y</isvalid>
    </Table>
    <Table>
        <material_id>12</material_id>
        <material_no>14</material_no>
        <material_name>特钢</material_name>
        <isvalid>Y</isvalid>
    </Table>
    <Table>
        <material_id>13</material_id>
        <material_no>15</material_no>
        <material_name>钢(机架)</material_name>
        <isvalid>Y</isvalid>
    </Table>
    <Table>
        <material_id>14</material_id>
        <material_no>16</material_no>
        <material_name>冷轧硅钢</material_name>
        <isvalid>Y</isvalid>
    </Table>
    <Table>
        <material_id>15</material_id>
        <material_no>17</material_no>
        <material_name>铝线</material_name>
        <isvalid>Y</isvalid>
    </Table>
    <Table>
        <material_id>16</material_id>
        <material_no>18</material_no>
        <material_name>AL00</material_name>
        <isvalid>Y</isvalid>
    </Table>
    <Table>
        <material_id>17</material_id>
        <material_no>19</material_no>
        <material_name>生铁</material_name>
        <material_cate />
        <isvalid>Y</isvalid>
    </Table>
</NewDataSet>';

DECLARE @handle INT;  
DECLARE @PrepareXmlStatus INT;  

EXEC @PrepareXmlStatus= sp_xml_preparedocument @handle OUTPUT, @XML;  

SELECT  *
FROM    OPENXML(@handle, '/NewDataSet/Table', 2)  
    WITH (
    material_id int,
    material_no NVARCHAR(30),
    material_name NVARCHAR(20),
    material_cate NVARCHAR(20),
    isvalid VARCHAR(1)
    );  


EXEC sp_xml_removedocument @handle; 

------ 存储过程处理

DECLARE @handle INT; 
DECLARE @PrepareXmlStatus INT;
DECLARE @xml NVARCHAR(MAX); 
SET @xml = REPLACE(@xmldata, '?', '');   -- 由于从C#传过来的xml字符串有问题
EXEC @PrepareXmlStatus= sp_xml_preparedocument @handle OUTPUT, @xml;  
IF OBJECT_ID('tempdb..#bomtemp') IS NOT NULL
    DROP TABLE #bomtemp; 

SELECT * INTO #bomtemp FROM (  
SELECT  *  
FROM    OPENXML(@handle, '/NewDataSet/Table', 2)    
    WITH (  
     org_id int ,  
	 prd_no varchar(100) ,  
	 cust_no varchar(20) ,  
	 sal_groupno varchar(10),  
	 cust_nm VARCHAR(50),  
     BOM_WZX NVARCHAR(20)  
    )  
) a   
  
    --SELECT TOP 100 * FROM #bomtemp  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值