你的 while 内部,还应该有一个 FETCH NEXT FROM Cur INTO
大概如下FETCH NEXT FROM Cur INTO
while @@fetch_status = 0
begin
-- to do FETCH NEXT FROM Cur INTO -- 这个不能丢了,不然就是永远第一个值 。
end -- end while
大概如下FETCH NEXT FROM Cur INTO
while @@fetch_status = 0
begin
-- to do FETCH NEXT FROM Cur INTO -- 这个不能丢了,不然就是永远第一个值 。
end -- end while
要用goto 配合循环
循环到出错数据时,是退出还是继续执行
在游标里用了没有循环,用goto跳过
BEGIN --print @BuildingType--开始事务
BEGIN TRANSACTION
SAVE TRANSACTION sp_Campus_TRANS--提交事务
LABCOMMIT:
IF (@@error = 0)
BEGIN
COMMIT TRANSACTION
SET @Output=0
GOTO success
END--以下回滚事务
LABROLLBACK:
BEGIN
--插入报警信息
set @WarningMessage='学校数据:'+@CollegeNo+',编号:'+@DANo+',事务提交失败'
insert into T_WarningMessage (DANo,DATime,CollegeNo,WarningType,Info) values (@DANo,@UpdateTime,@CollegeNo,'',@WarningMessage)ROLLBACK TRANSACTION sp_Campus_TRANSsuccess:
commit TRANSACTION SET @Output=-1
END
BEGIN
--print @BuildingType
--开始事务
BEGIN TRANSACTION
SAVE TRANSACTION sp_Campus_TRANS
--提交事务
LABCOMMIT:
IF (@@error = 0)
BEGIN
COMMIT TRANSACTION --第一次提交事务
SET @Output=0
GOTO success
END
--以下回滚事务
LABROLLBACK:
BEGIN
--插入报警信息
set @WarningMessage='学校数据:'+@CollegeNo+',编号:'+@DANo+',事务提交失败'
insert into T_WarningMessage (DANo,DATime,CollegeNo,WarningType,Info) values (@DANo,@UpdateTime,@CollegeNo,'',@WarningMessage)
ROLLBACK TRANSACTION sp_Campus_TRANS
success:
commit TRANSACTION --第二次提交事务问题:这里事务提交了两次啊???
SET @Output=-1
END
看你自己要什么效果,最外层有事务时才需要保存事务点,提交第2层事务再提交最外层事务,用save时首先要知道最外层有没有事务
WHILE @@fetch_status=0
BEGIN
--print @BuildingType
--开始事务
BEGIN TRANSACTION
SAVE TRANSACTION sp_Campus_TRANS
--提交事务
LABCOMMIT:
IF (@@error = 0)
BEGIN
COMMIT TRANSACTION
SET @Output=0
GOTO success
END
--以下回滚事务
LABROLLBACK:
BEGIN
--插入报警信息
set @WarningMessage='学校数据:'+@CollegeNo+',编号:'+@DANo+',事务提交失败'
insert into T_WarningMessage (DANo,DATime,CollegeNo,WarningType,Info) values (@DANo,@UpdateTime,@CollegeNo,'',@WarningMessage)
ROLLBACK TRANSACTION sp_Campus_TRANS
success:
IF @@TRANCOUNT>0
commit TRANSACTION
SET @Output=-1
END