最近要在存储过程中读取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 =''
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>'

ms sql server读取xml文件存储过程-sp_xml_preparedocument的更多相关文章

  1. MS SQL Server之光标、存储过程和触发器

    光标 通常数据库操作被认为是以数据集为基础的操作,但是光标被用于以记录为单位来进行操作,来获取数据库中的数据的子集.光标一般用于过程化程序里的嵌入的SQL语句. 对光标的定义如下: DECLARE C ...

  2. 清理ms sql server 大日志文件数据

    1.手动分离数据库: 2.手动删除日志文件: 3.重新生成日志文件: CREATE DATABASE FMIS0 ON (FILENAME = 'E:\FMIS0_DATA\FMIS0-Date') ...

  3. 使用SqlBulkCopy导入数据至MS SQL Server

    原文:使用SqlBulkCopy导入数据至MS SQL Server Insus.NET一直使用表类型来数据入MS SQL Server.参考<存储过程参数为DataTable>http: ...

  4. MS SQL Server数据库修复/MDF数据文件数据恢复/MDF质疑/mdf无法附加

    微软的SQL Server 数据库最常用的有两种类型的文件: 1.主要数据文件,文件后缀一般是.MDF: 2.事务日志文件,文件后缀一般是.LDF. 用户数据表.视图.存储过程等等数据,都是存放在MD ...

  5. MS SQL Server中数据表、视图、函数/方法、存储过程是否存在判断及创建

    前言 在操作数据库的时候经常会用到判断数据表.视图.函数/方法.存储过程是否存在,若存在,则需要删除后再重新创建.以下是MS SQL Server中的示例代码. 数据表(Table) 创建数据表的时候 ...

  6. 在易语言中调用MS SQL SERVER数据库存储过程方法总结

    Microsoft SQL SERVER 数据库存储过程,根据其输入输出数据,笼统的可以分为以下几种情况或其组合:无输入,有一个或多个输入参数,无输出,直接返回(return)一个值,通过output ...

  7. sql server 常用的系统存储过程

      系统存储过程 说明 sp_databases 列出服务上的所有数据库 sp_helpdb 报告有关指定数据库或所有数据库的信息 sp_renamedb 更改数据库的名称 sp_tables 返回当 ...

  8. MS SQL SERVER 中的系统表

    MS SQL SERVER 中的系统表 序号 名称 说明 备注 1 syscolumns 每个表和视图中的每列在表中占一行,存储过程中的每个参数在表中也占一行.   2 syscomments 包含每 ...

  9. (火炬)MS SQL Server数据库案例教程

    (火炬)MS SQL Server数据库案例教程 创建数据库: CREATE DATABASE TDB //数据库名称 ON ( NAME=TDB_dat,//逻辑文件名 在创建数据库完成之后语句中引 ...

随机推荐

  1. 【Android】Android输入子系统

    成鹏致远 | lcw.cnblogs.com | 2013-10-25 Linux输入子系统回顾 1:为什么要回顾linux输入子系统?这个问题后面自然就知道了 1.linux输入子系统设备是基于平台 ...

  2. Adam算法

    结合了Momentum 和RMSprop算法的优点

  3. OPatch cannot find a valid oraInst.loc file to locate Central Inventory

    命令:opatch lsinventory用于查看数据库所打Patch的列表.但运行的时候发现错误: [oracle@bej301441 OPatch]$  opatch lsinventory In ...

  4. Python中的get和set方法

    众所周知,像Java,C++这些语言中都有private这种修饰符,一般声明类的时候,我们都用private声明一个属性,然后给它写一个get方法和一个set方法,可能有人有疑问,为啥不直接写成pub ...

  5. opencv2/nonfree/nonfree.hpp:没有那个文件或目录

    致命错误: opencv2/nonfree/nonfree.hpp:没有那个文件或目录 fatal error: opencv2/nonfree/nonfree.hpp: No such file o ...

  6. 在windows下安装git后没有ssh文件夹

    在windows7下安装git后,运行 cd ~/.ssh $ bash: cd: /c/Users/Administrator/.ssh: No such file or directory 出现以 ...

  7. SpringBoot 拦截器(Interceptor)的使用

    拦截器intercprot  和 过滤器 Filter 其实作用类似 在最开始接触java 使用struts2的时候,里面都是filter 后来springmvc时就用interceptor 没太在意 ...

  8. [React] 12 - Redux: async & middleware

    Ref: Redux 入门教程(二):中间件与异步操作 这里只是简单地了解中间件的概念,对于异步,貌似之后要讲的saga更胜一筹. reducer计算新状态的策略: Action 发出以后,Reduc ...

  9. 嵌入式Linux应用开发__求职要求

    A.熟悉嵌入式软件开发,有较好的C语言开发能力,熟悉Linux线程,信号量,同步,消息队列,网络编程,音频等:B.能够熟练使用GDB调试工具:C.熟悉linux脚本,对于Android编译环境有一定理 ...

  10. modbus协议说明(转)

    MODBUS-RTU通讯协议简介   什么是MODBUS? MODBUS 是MODICON公司最先倡导的一种软的通讯规约,经过大多数公司 的实际应用,逐渐被认可,成为一种标准的通讯规约,只要按照这种规 ...