zoukankan      html  css  js  c++  java
  • ms sql server读取xml文件存储过程-sp_xml_preparedocument

    最近要在存储过程中读取xml中节点的值,然后进行sql操作;

    要使用到的系统存储过程如下:sp_xml_preparedocument

    create procedure [dbo].[pro_Test_Readxml] 
        @sData ntext
        as
    --XML 定义变量 并 解析赋值
    declare @xmldata_id int
    exec sp_xml_preparedocument @xmldata_id output,@sData
    
    declare @sPage int --页码
    select @sPage=page  from openxml(@xmldata_id,'/DataTable/diffgr/NewDataSet/PARAMS',2)with (page int)
    
    declare @sRp int --每页记录数
    select @sRp =rp from openxml(@xmldata_id,'/DataTable/diffgr/NewDataSet/PARAMS',2) with (rp int)
    
    declare @sZjlx varchar(10)--证件类型
    select @sZjlx =zjlb from openxml(@xmldata_id,'/DataTable/diffgr/NewDataSet/PARAMS',2) with (zjlb varchar(10))
    
    declare @sZjhm varchar(50) --证件号码
    select @sZjhm =zjhm from openxml(@xmldata_id,'/DataTable/diffgr/NewDataSet/PARAMS',2) with (zjhm varchar(50))
    
    declare @sFlag varchar(50) --标志
    select @sFlag =flag from openxml(@xmldata_id,'/DataTable/diffgr/NewDataSet/PARAMS',2) with (flag varchar(50))
    
    exec sp_xml_removedocument @xmldata_id
    if @@ERROR <> 0
    begin
        select '解析xml数据失败!'
        return
    end
    
    declare @iRecBegin varchar(6),@iRecEnd varchar(6),@sSql varchar(1000),@sSqlText varchar(3000)
    if(@sRp <>'' and @sPage <> '')
    begin
        select @iRecBegin=@sRp * (@sPage -1)+1,@iRecEnd=@sRp * @sPage
    end
    else
    begin
        select @iRecBegin =1,@iRecEnd=20
    end
    
    select @sSql = '',@sSqlText =''
    
    if ISNULL(@sZjlx,'')<>''
    begin
        if @sZjlx ='99'
            select @sSql =@sSql+''--sql
    end
    
    if ISNULL(@sFlag,'')<>''
    begin
        begin
            select @sSqlText =''+@sSql;---sql
        end
    --print @sSqlText
    EXEC(@sSqlText)
    
    GO

    执行如下:

    EXEC pro_Test_Readxml '<DataTable><diffgr><NewDataSet><PARAMS><page>1</page><rp>10</rp><zjlb>99</zjlb><zjhm>31011600101000120141211155030551</zjhm><falg>1</flag></PARAMS></NewDataSet></diffgr></DataTable>'

    一个完整的例子:

    create procedure [dbo].[usp_Jb_Zlzfx_Gwsc]
        @sData ntext
        as
    set nocount on
    
    declare @idoc int 
    exec sp_xml_preparedocument @idoc output ,@sData
    select *  into #TMP_PARAS
    from OpenXML(@idoc,'PARAS/ITEM',2)
    with(
         XM varchar(50),
         ZZSCFS varchar(30),
         DCYSXM varchar(50),
         DCRQ varchar(10),
         INFO varchar(1000)
    )
    exec sp_xml_removedocument @idoc
    if @@ERROR <> 0
    begin
        select 'F' as RST ,'1.解析XML数据失败!' as MSG
        return
    end
    
    select * FROM #TMP_PARAS
    

    执行:

        
    exec usp_Jb_Zlzfx_Gwsc '<PARAS><ITEM><XM>张三</XM><ZZSCFS>1</ZZSCFS><DCYSXM>魏飞</DCYSXM><DCRQ>2016-12-06</DCRQ><INFO>text</INFO></ITEM></PARAS>'
  • 相关阅读:
    从获取QQ验证码谈如何改进用户体验,提高程序的响应效果
    如何利用C#批量注册QQ邮箱
    利用DotRAS组件,实现ADSL的自动拨号断网自动化操作
    探讨如何利用C#登录QQ邮箱进行群邮件的发送
    利用C#开发基于snmpsharpnet基础的SNMP开发应用
    QQ窗口抓取及如何进行自动化操作
    对比三种GoogleMap图标操作处理,谈如何构造快速响应的GoogleMap图标叠加操作
    Winform下的地图开发控件(GMap.NET)使用心得之三批量解析地址经纬度坐标
    基于Lumisoft.NET实现的邮件发送功能
    谈谈数据加密的处理提供各种算法处理
  • 原文地址:https://www.cnblogs.com/hoaprox/p/6004591.html
Copyright © 2011-2022 走看看