SQL Server 数据库游标的使用
2015-10-28 21:17
429 查看
昨天接到一个有趣的任务,将数据库中ID相同的数据取出,其中有一个字段为XML文件,将这些XML文件拼接成一个文件,最后在一条记录中显示。想了很多办法,最后得到一个比较美好的解决思路。
思路:创建一个临时表,将XML字段整列取出,然后利用数据库游标和循环将XML文件转换成字符串进行拼接(注:XML文件不能直接进行拼接,需要用convert函数转化成字符串,具体使用方法自行谷歌),最后将整个拼接的字符串又转换成XML文件存入一个临时表中。
以下是实现代码:
以下是拼接前查询出的XML文件:
![](https://img-blog.csdn.net/20151028211042177)
以下是完成拼接后的截图:
![](https://img-blog.csdn.net/20151028211606481)
涉及技术总结:
1.临时表的创建与使用(原谅我以前都不知道有临时表这个概念存在)。
2.数据库游标与循环的配合使用。
3.XML文件与字符串的转换(说实话,我做这个测试大部分时间耗在这部分,因为无知,直接将XML文件进行拼接,结果临时表中总是为NULL,所以事情虽小,也记一下吧)。
思路:创建一个临时表,将XML字段整列取出,然后利用数据库游标和循环将XML文件转换成字符串进行拼接(注:XML文件不能直接进行拼接,需要用convert函数转化成字符串,具体使用方法自行谷歌),最后将整个拼接的字符串又转换成XML文件存入一个临时表中。
以下是实现代码:
--创建一个临时表 if exists(select SessionId from #TempTable where SessionId !='') drop table #TempTable go create table #TempTable( SessionId nvarchar(255), TaskCode nvarchar(50), XMLProcesstask xml ) declare @TaskCode nvarchar(255) set @TaskCode= (select VariableValue from TaskProcess.Task.SessionContext where VariableName='TaskCode' and SessionId='DF8EA515-0C33-45D6-9EDC-018778E25FE9') --声明一个游标 declare mycursor cursor scroll for select XMLProcessAction from TaskProcess.Task.SessionProcessStatus where SessionId='DF8EA515-0C33-45D6-9EDC-018778E25FE9' --打开游标 open mycursor --声明一个@str变量存放字符串,声明@XMLProcessAction变量存放游标获取的XML文件 declare @str nvarchar(max) declare @XMLProcessAction xml --先将游标置于第一行,便将第一行XML文件转成字符串赋给@str fetch first from mycursor into @XMLProcessAction set @str=null set @str='<Task>'+convert(nvarchar(max),@XMLProcessAction) --循环@@FETCH_STATUS=0表示fetch语句成功 while @@FETCH_STATUS=0 --循环开始,每次将游标指向下一行,转换XML并与之前的@str进行拼接 begin fetch next from mycursor into @XMLProcessAction set @str=@str+convert(nvarchar(max),@XMLProcessAction) end --拼接结束后关闭游标,并将拼接结果插入临时表,并查询验证 close mycursor insert into #TempTable(SessionId,TaskCode,XMLProcesstask) values('DF8EA515-0C33-45D6-9EDC-018778E25FE9',@TaskCode,@str+'</Task>') select *from #TempTable
以下是拼接前查询出的XML文件:
以下是完成拼接后的截图:
涉及技术总结:
1.临时表的创建与使用(原谅我以前都不知道有临时表这个概念存在)。
2.数据库游标与循环的配合使用。
3.XML文件与字符串的转换(说实话,我做这个测试大部分时间耗在这部分,因为无知,直接将XML文件进行拼接,结果临时表中总是为NULL,所以事情虽小,也记一下吧)。
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- 数据库链接字符串查询网站
- DB2实例管理
- DB2实例管理
- 保障MySQL数据安全的14个最佳方法
- mysql问答汇集
- 创建一个空的IBM DB2 ECO数据库的方法
- Access 2000 数据库 80 万记录通用快速分页类
- 开通一个数据库失败的原因的和解决办法
- 一个简单的asp数据库操作类
- CentOS下DB2数据库安装过程详解
- EasyASP v1.5发布(包含数据库操作类,原clsDbCtrl.asp)第1/2页
- sql2008 还原数据库解决方案
- Oracle 数据库自动存储管理-安装配置
- Oracle 数据库 临时数据的处理方法
- 数据库分页查询语句数据库查询
- 最近比较流行的数据库挂马
- 分割超大Redis数据库例子
- 推荐Sql server一些常见性能问题的解决方法