不知道为嘛对SQL的游标有一种莫名的恐惧,或许是当年C/C++指针的苦头吃多了;也看了一些前辈的文章,说是游标要少用。
当然,虽然不用游标,但遇上逐行操作,我还是有我的办法。
以下脚本就是我所说的‘逐行’操作。有一个临时表变量,里面只有textParam值,其余三列的值都是从textParam这个xml数据中一行一行解析出来的。
这段脚本涉及到几个概念:
- with as 构建的查询方式,易读且降低性能损失: http://jc-dreaming.iteye.com/blog/772030
- ROW_Number() 自动产生行号: http://msdn.microsoft.com/zh-cn/library/ms186734.aspx
- xQuery操作xml: http://blog.csdn.net/jinjazz/article/details/4443585
;with T
as (select ROW_NUMBER() over (order by jobName desc) as Row,
textParam,accountingDate,serverName,dbName
From @table )
update T
set accountingDate = textParam.value('(//TakoJobParameter/Value)[1]','varchar(128)')
, serverName = textParam.value('(//server)[1]','varchar(64)')
, dbName = textParam.value('(//database)[1]','varchar(64)')
where textParam.value('(//TakoJobParameter/name)[1]','varchar(128)')in ('dt_accounting_date','dt_Report_Date')