SQL 解析XML 解决方案.docx_第1页
SQL 解析XML 解决方案.docx_第2页
SQL 解析XML 解决方案.docx_第3页
SQL 解析XML 解决方案.docx_第4页
SQL 解析XML 解决方案.docx_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Sql 解析XML 解决方案1. 1、XML 为数据传入的XML格式2. root 为根目录3. 为对应需要插入的表,详见一对多或者多对多的xml格式4. 多对多是 为该条数据对应的从表的唯一标识,可以为其他名称的字段。如:1 15. 注意案例存储过程只定义了2个参数,可以根据自己的具体需求增加参数。一、 对单表(单条或者多条)的操作。declare XML xmlset XML=N 1test1 2test2 Insert into Temp(ID,Name) select S.value(ID)1,int) as ID,S.value(name)1,nvarchar) as name,from XML.nodes(/root/A) T(S)注意:A 为表名 ID,Name为此表对应的字段名二、 对多表(一对多)的操作declare CustomerID int declare XML xmlset XML=N 深圳大展116 2626 Insert into Customer(CustomerName,CustomerTypeID) select S.value(CustomerName)1,nvarchar) as CustomerName,S.value(CustomerTypeID)1,int) as CustomerTypeIDfrom XML.nodes(/root/Customer) T(S) set CustomerID =IDENTITY insert into CustomerBranch(CustomerID,AreaID,BranchID) select CustomerID , S.value(AreaID)1,int) as AreaID,S.value(BranchID)1,int) as BranchIDfrom XML.nodes(/root/CustomerBranch) T(S)三、 对多表(多对多)的操作declare CustomerID int declare Count intdeclare Error intdeclare XML xmlset XML=N 1深圳大展116 2艾默生116126246223 select Count =MAX(RowNumber)from ( select ROW_NUMBER() OVER (ORDER BY S.value(ID)1,int) ) AS RowNumber from XML.nodes(/root/Customer) T(S) as m while(Count0)begininsert into Customer(CustomerName,CustomerTypeID) select CustomerName,CustomerTypeIDfrom (select ROW_NUMBER() OVER (ORDER BY S.value(ID)1,int) desc ) AS RowNumber,S.value(CustomerName)1,nvarchar(200) as CustomerName,S.value(CustomerTypeID)1,int) as CustomerTypeIDfrom XML.nodes(/root/Customer) T(S) ) as m where RowNumber=Countset CustomerID=IDENTITY insert into CustomerBranch(CustomerID,AreaID,BranchID) select CustomerID , S.value(AreaID)1,int) as AreaID,S.value(BranchID)1,int) as BranchIDfrom XML.nodes(/root/CustomerBranch) T(S) where S.value(ID)1,int) =( select ID from ( select ROW_NUMBER() OVER (ORDER BY S.value(ID)1,int) desc ) AS RowNumber,S.value(ID)1,int) as ID from XML.nodes(/root/Customer) T(S) ) as m where RowNumber=Count)set Count=Count-1end四、 批量更新数据declare XML xmlset XML=N1大客户_TestXML22大客户_TestXML1 update Customer set CustomerName =m.value(CustomerName)1,nvarchar(200)from XML.nodes(/root/Customer) T(m)where CustomerID=m.value(CustomerID)1,int) 五、 具体存储过程案例(一对多或者多对多的根据案例代码放入到对应的事务即可)-测试存储过程ALTER PROCEDURE dbo.AddXML(xmlstr XML,ProcMessageCode int output )ASBEGINset nocount on set xact_abort on -定义中间变量 declare error int -设置初始值 set error = 0 -开始事务处理 begin tran tranAddXML insert into tt select S.value(ID)1,int) as ID, S.value(name)1,nvarchar(10) as name, S.value(age)1,int) as age from xmlstr.nodes(/root/tt) T(S) -记录错误 set error = error + ERROR if error 0 begin -回滚事务 rollback tran tranAddXML -返回保存失败 set ProcMessageCode =

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论