--第一种的写法没问题,执行不会错,只是没有更新的效果而已. --测试--测试数据 create table QQQ(AA varchar(50),ZZ varchar(50)) insert QQQ select 'W','E' union all select 'S','D' union all select 'X','C' go--处理 DECLARE CURS CURSOR FOR SELECT AA,ZZ FROM QQQ FOR UPDATE DECLARE @aa varchar(50),@zz varchar(50)OPEN CURSFETCH NEXT FROM CURS INTO @aa,@zzWHILE @@FETCH_STATUS = 0 BEGIN UPDATE QQQ SET @aa = @zz WHERE CURRENT OF CURS FETCH NEXT FROM CURS INTO @aa,@zz ENDCLOSE CURS DEALLOCATE CURS go--显示结果 select * from QQQ--删除测试 drop table QQQ/*--测试结果 AA ZZ ------------ ----------- W E S D X C(所影响的行数为 3 行) --*/
to zjcxc(: 邹建 老兄,我真的更新成功过,想查个究竟,,helpto progress99(如履薄冰) 我就是想要对cursor进一步了解
类似RecordSet原理
cursor下次fetch前对记录用变量值进行更新,
有没有这种可能
--测试--测试数据
create table QQQ(AA varchar(50),ZZ varchar(50))
insert QQQ select 'W','E'
union all select 'S','D'
union all select 'X','C'
go--处理
DECLARE CURS CURSOR FOR SELECT AA,ZZ FROM QQQ FOR UPDATE DECLARE @aa varchar(50),@zz varchar(50)OPEN CURSFETCH NEXT FROM CURS INTO @aa,@zzWHILE @@FETCH_STATUS = 0
BEGIN
UPDATE QQQ SET @aa = @zz
WHERE CURRENT OF CURS
FETCH NEXT FROM CURS INTO @aa,@zz
ENDCLOSE CURS
DEALLOCATE CURS
go--显示结果
select * from QQQ--删除测试
drop table QQQ/*--测试结果
AA ZZ
------------ -----------
W E
S D
X C(所影响的行数为 3 行)
--*/