declare @Lid as varchar(10)
declare @LI as int
declare @AN as int
declare bucur cursor for
 select top 2 t17LibraryId,t17Identifier,t17AccountNO From budgets_t17
open bucur
fetch next from bucur
into @Lid,@LI,@AN
 while @@fetch_Status = 0
begin
--print cast(@Lid as varchar(10))+cast(@LI as varchar(10))+cast(@AN as varchar(10))
update budgets_t17 set t17LibraryId = '0002' where current of bucur
fetch next from bucur
into @Lid,@LI,@AN
end
close bucur
deallocate bucur其实就是修改了2条数据,为什么下面提示了7行“(1 row(s) affected)”呢(表里一共有7行数据),这样是不是慢了呢?怎么只让他修改两行呢???谢谢赐教。

解决方案 »

  1.   

    where current of bucur 这是什么意思?是不是budgets_t17有触发器,所以提示了7行“(1 row(s) affected)”呢?
      

  2.   


    --指定修改条件就可以了。
    declare @Lid as varchar(10) 
    declare @LI as int 
    declare @AN as int 
    declare bucur cursor for select top 2 t17LibraryId,t17Identifier,t17AccountNO From budgets_t17 
    open bucur 
    fetch next from bucur into @Lid,@LI,@AN 
    while @@fetch_Status = 0 
    begin 
    update budgets_t17 set t17LibraryId = '0002' where t17LibraryId=@Lid and t17Identifier=@li and t17AccountNO=@an
    fetch next from bucur into @Lid,@LI,@AN 
    end 
    close bucur 
    deallocate bucur 
      

  3.   

    确实有触发器。。我当时没想到。
    顺便提一下,where current of bucur  是指游标取到的当前数据。
      

  4.   

    update budgets_t17 set t17LibraryId = '0002' where current of bucur 
    那更不明白...那这个where current of bucur什么意思???
      

  5.   


    这个语法,我还是头一次见,是sql server的?联机文档上没有查到
      

  6.   


    这个写法的前提是:
    t17LibraryId,t17Identifier,t17AccountNO能够确定一行记录。楼主的这个问题是需要在这句:
    update budgets_t17 set t17LibraryId = '0002' where current of bucur 加一个能确定唯一行的字段或字段组,比如主键:
    update budgets_t17 set t17LibraryId = '0002' where 主键='xxx'这个主键要在:
    declare bucur cursor for select top 2 t17LibraryId,t17Identifier,t17AccountNO From budgets_t17 
    open bucur 
    fetch next from bucur into @Lid,@LI,@AN 
    时,也放到游标内。如:
    declare bucur cursor for select top 2 t17LibraryId,t17Identifier,t17AccountNO,主键字段 From budgets_t17 
    open bucur 
    fetch next from bucur into @Lid,@LI,@AN,@主键字段变量然后在update时:
    update budgets_t17 set t17LibraryId = '0002' where 主键=@主键字段变量
    ps:不太清楚current of bucur的用法。