导航

SQL游标 更新

Posted on 2015-12-22 17:59  yiyishuitian  阅读(323)  评论(0编辑  收藏  举报

--定义游标
DECLARE cur_getaddress CURSOR
FOR
SELECT
new_a
,new_b
,new_c
,new_d

FROM table
WHERE (new_a is not null and new_b is not null and new_x IS NULL) or
(new_c is not null and new_d is not null and new_y IS NULL )
--打开游标
OPEN cur_getaddress
DECLARE @a VARCHAR(20) , @b VARCHAR(20),@c VARCHAR(20) , @d VARCHAR(20)
FETCH NEXT FROM cur_getaddress INTO @a, @b ,@c,@d
WHILE @@fetch_status = 0
BEGIN

SET NOCOUNT ON ;
SET xact_abort ON
--开始事务
BEGIN TRANSACTION
--延时150毫秒
WAITFOR DELAY '00:00:00.150'
--更新
UPDATE table
SET new_x = dbo.[GetAddressByLonLat](@a,@b)
WHERE new_a=@a AND new_b = @b AND new_x IS NULL
--延时150毫秒
WAITFOR DELAY '00:00:00.150'
UPDATE table
SET new_y = dbo.[GetAddressByLonLat](@c,@d)
WHERE new_c=@c AND new_d = @d AND new_y IS NULL
COMMIT TRANSACTION
--取下一个数据
FETCH NEXT FROM cur_getaddress INTO  @a, @b ,@c,@d

END
CLOSE cur_getaddress ;
DEALLOCATE cur_getaddress ;