看看下面的存储过程有什么问题DECLARE @strLoginID VARCHAR(16)
BEGIN
BEGIN TRANSACTION
declare db cursor for
SELECT LoginID FROM dbo.s_Users WHERE len(UnitCoding) in(9,12)
END
open db
fetch next from db into @strLoginID
while @@fetch_status = 0 BEGIN
insert into s_P_User
select @strLoginID,LevelID from s_P_User where LoginID = 'aa'
fetch next from db into @strLoginID
END
close db
deallocate db
COMMIT TRANSACTION

解决方案 »

  1. DECLARE @strLoginID VARCHAR(16)
    ----BEGIN
    BEGIN TRANSACTION
    declare db cursor for
    SELECT LoginID FROM dbo.s_Users WHERE len(UnitCoding) in(9,12)
    ----END
    open db
    fetch next from db into @strLoginID
    while @@fetch_status = 0
    BEGIN
    insert into s_P_User
    select @strLoginID,LevelID from s_P_User where LoginID = 'aa'
    fetch next from db into @strLoginID
    END
    close db
    deallocate db
    COMMIT TRANSACTION
      

  2. 你这是油标.游标的基本写法declare @id int,@name varchar(20);
    declare cur cursor fast_forward for
      select id,name from a;
    open cur;
    fetch next from cur into @id,@name;
    while @@fetch_status=0
    begin
       --做你要做的事
       fetch next from cur into @id,@name;
    end
    close cur;
    deallocate cur;
      

  3. DECLARE @strLoginID VARCHAR(16)
    declare db cursor  fast_forward for
    SELECT LoginID FROM dbo.s_Users WHERE len(UnitCoding) in(9,12)
    open db;
    fetch next from db into @strLoginID
    while @@fetch_status = 0 
    BEGIN
      insert into s_P_User
      select @strLoginID,LevelID from s_P_User where LoginID = 'aa'
      fetch next from db into @strLoginID
    END
    close db
    deallocate db
      

  4. 你用BEGIN TRANSACTION显式开启事务 应该放在外面吧 
    怎么放到第一个BEGIN...END里面去了?
      

aliyun

类似问题 »