您的位置:首页 > 数据库

SQL Server 数据库游标的使用

2015-10-28 21:17 429 查看
昨天接到一个有趣的任务,将数据库中ID相同的数据取出,其中有一个字段为XML文件,将这些XML文件拼接成一个文件,最后在一条记录中显示。想了很多办法,最后得到一个比较美好的解决思路。

思路:创建一个临时表,将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,所以事情虽小,也记一下吧)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库 sql server