Declare @v_id int --主键,自动增加
Declare @v_account varchar(20) --用户帐号
Declare @v_newpwd varchar (20) --将要更改的新密码
Declare @v_server varchar(20) --出错的服务器标志
Declare @v_over int --是否已经处理成功,默认是0,如果通过该作业将远程链接服务器的对应帐号改为该新密码以后,改位置1,也就是一个可以写的游标,遍历一遍以后,查到如果改标志位为1,就删除掉,下次作业调度就不用执行了 Begin
DECLARE AccountUpList_Cursor CURSOR
SCROLL
DYNAMIC
FORselect id,account,newpwd,sysobj,IsSuc
from SYS_ERR_LOG
where IsSuc=0
order by attime FOR UPDATE OF [IsSuc]OPEN AccountUpList_Cursor
--打开游标
FETCH NEXT FROM AccountUpList_Cursor into @v_id,@v_account,@v_newpwd,@v_server,@v_over
--把第一行传递到变量
WHILE @@FETCH_STATUS = 0
BEGIN
BEGIN TRANSACTION
if @v_server='R_DB001' update R_DB001.AccountDB.dbo.Account set password=@v_newpwd where Account=@v_account
--更新远程数据库的密码,R_DB001是我的建立的一个“链接服务器”,可以正常查询
update SYS_ERR_LOG set IsSuc=1 where id=@v_id
--delete from SYS_ERR_LOG where id=@v_id
--删除该错误日志表的记录
if @@error>0
ROLLBACK
else
COMMIT TRANSACTION
FETCH NEXT FROM AccountUpList_Cursor into @v_id,@v_account,@v_newpwd,@v_server,@v_overENDCLOSE AccountUpList_Cursor
--关闭游标
DEALLOCATE AccountUpList_Cursor
--关闭游标结构 delete from SYS_ERR_LOG where IsSuc=1
end没有报语法错误了
去掉:
BEGIN TRANSACTION
******** 保留这些处理的语句
if @@error>0
ROLLBACK
else
COMMIT TRANSACTION