USE [localhost]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GOALTER procedure [dbo].[CKGL_DRCK]
as
    
    declare @MC varchar(20);
    declare @DRCKMC varchar(20);
    declare @SL int;
    declare @SPKCL int;
 
    declare tCursor cursor for
       select MC,DRCKMC,SL from CKGL;
     select SPKCL from SPMC;
 
begin
       Open tCursor
       Fetch next From tCursor
       Into @MC,@DRCKMC,@SL,@SPKCL
        While(@@Fetch_Status = 0)
Begin
          begin
                          SET @SPKCL=@SPKCL-@SL;             update SPMC set SPKCL=@SPKCL where SSCK=@MC;
             update SPMC set SPKCL=@SPKCL where SSCK=@DRCKMC;            end
   Fetch next From tCursor
Into @MC,@DRCKMC,@SL,@SPKCL
         End
    Close tCursor
     Deallocate tCursor
             end

解决方案 »

  1.   

     declare tCursor cursor for
      select MC,DRCKMC,SL from CKGL;
      select SPKCL from SPMC;
    一个游标为什么对应两个select 语句?
      

  2.   

    --游标用法实例
    例子
    table1结构如下
    id    int
    name  varchar(50)declare @id int
    declare @name varchar(50)
    declare cursor1 cursor for         --定义游标cursor1
    select * from table1               --使用游标的对象(跟据需要填入select文)
    open cursor1                       --打开游标fetch next from cursor1 into @id,@name  --将游标向下移1行,获取的数据放入之前定义的变量@id,@name中while @@fetch_status=0           --判断是否成功获取数据
    begin
    update table1 set name=name+'1'
    where id=@id                           --进行相应处理(跟据需要填入SQL文)fetch next from cursor1 into @id,@name  --将游标向下移1行
    endclose cursor1                   --关闭游标
    deallocate cursor1
      

  3.   

    ALTER procedure [dbo].[CKGL_DRCK]
    as
       
      declare @MC varchar(20);
      declare @DRCKMC varchar(20);
      declare @SL int;
      declare @SPKCL int;
     
      declare tCursor cursor for
      select MC,DRCKMC,SL from CKGL t1
      inner join SPMC t2 on t1.SPKCL = t2.SPKCL;
     
    begin
      Open tCursor
      Fetch next From tCursor
      Into @MC,@DRCKMC,@SL,@SPKCL
      While(@@Fetch_Status = 0)
    Begin
      begin
      SET @SPKCL=@SPKCL-@SL;  update SPMC set SPKCL=@SPKCL where SSCK=@MC;
      update SPMC set SPKCL=@SPKCL where SSCK=@DRCKMC;  end
      Fetch next From tCursor
    Into @MC,@DRCKMC,@SL,@SPKCL
      End
      Close tCursor
      Deallocate tCursor
          end
      

  4.   

    你要哪个表的MC字段,就在前面加个表名,比如t1.MC或者t2.MC,如果其他字段在两张表里也同时存在,那么都在前面加表名就可以了。
      

  5.   

    ALTER procedure [dbo].[CKGL_DRCK]
    as
       
      declare @MC varchar(20);
      declare @DRCKMC varchar(20);
      declare @SL int;
      declare @SPKCL int;
     
      declare tCursor cursor for
      select t1.MC,DRCKMC,SL from CKGL t1
      inner join SPMC t2 on t1.SPKCL = t2.SPKCL;
     
    begin
      Open tCursor
      Fetch next From tCursor
      Into @MC,@DRCKMC,@SL,@SPKCL
      While(@@Fetch_Status = 0)
    Begin
      begin
      SET @SPKCL=@SPKCL-@SL;  update SPMC set SPKCL=@SPKCL where SSCK=@MC;
      update SPMC set SPKCL=@SPKCL where SSCK=@DRCKMC;  end
      Fetch next From tCursor
    Into @MC,@DRCKMC,@SL,@SPKCL
      End
      Close tCursor
      Deallocate tCursor
          end