@@ERROR Returns the error number for the last Transact-SQL statement executed. 返回最后一个SQL查询的错误代码@@ROWCOUNT Returns the number of rows affected by the last statement. 返回最后一个查询的受影响行数
IF @@ERROR <> 0 or @@rowcount > 2 begin rollback tran addandup end 就是这个拉 我写>1 都改不了数据
因为你每个表只更新1条记录, @@rowcount 肯定是1所以回滚了,肯定修改不了
那就说明@@rowcount这个已经大于1了, 当然改不了, 事务回滚了啊!
CREATE PROCEDURE sp_personal_userinfoUpdate09 ( @iUserRegId int ,@sUserTrueName varchar(50) ,@sNickName varchar(50) ,@sUserEmail varchar(50) ,@sMobile varchar(50) ,@sTel varchar(50) ,@sQq varchar(50) ,@sMsn varchar(50) ,@sBirthday varchar(50) ,@sRegion varchar(50) ,@sCity varchar(50) ,@sSelfIntro varchar(2000) ,@sWorkYn varchar(10) ,@sOpenInfoYn varchar(10) ,@sPhoto varchar(10) ,@iSex int ,@sSpecialty varchar(50) ,@sUserLoginName varchar(50) ) WITH ENCRYPTION AS BEGIN begin tran addandup update tb_userRegInfo set fd_User_Name=@sUserTrueName,fd_nickName=@sNickName,fd_Email=@sUserEmail ,fd_mobile=@sMobile,fd_tel=@sTel,fd_qq=@sQq,fd_msn=@sMsn,fd_birthday=@sBirthday ,fd_region=@sRegion,fd_city=@sCity,fd_selfIntro=@sSelfIntro ,fd_workYn=@sWorkYn,fd_openInfoYn=@sOpenInfoYn,fd_photoFileName=@sPhoto ,fd_sex=@iSex,fd_Specialty=@sSpecialty where fd_userRegId=@iUserRegId; --同时修改学生表中的信息 update tb_Users set fd_User_Name=@sUserTrueName,fd_nickName=@sNickName,fd_Email=@sUserEmail ,fd_mobile=@sMobile,fd_tel=@sTel,fd_qq=@sQq,fd_msn=@sMsn,fd_birthday=@sBirthday ,fd_region=@sRegion,fd_city=@sCity,fd_selfIntro=@sSelfIntro ,fd_workYn=@sWorkYn,fd_openInfoYn=@sOpenInfoYn,fd_photoFileName=@sPhoto ,fd_sex=@iSex,fd_Specialty=@sSpecialty where fd_Login_Name=@sUserLoginName commit tran addandup IF @@ERROR <> 0 or @@rowcount > 1 begin rollback tran addandup end END我这样写 它就给我回滚了
如果是更新一个表。可以用这样的结构 IF @@ERROR <> 0 or @@rowcount > 2 如果是2个表。用这个没得用
CREATE PROCEDURE sp_personal_userinfoUpdate09 ( @iUserRegId int ,@sUserTrueName varchar(50) ,@sNickName varchar(50) ,@sUserEmail varchar(50) ,@sMobile varchar(50) ,@sTel varchar(50) ,@sQq varchar(50) ,@sMsn varchar(50) ,@sBirthday varchar(50) ,@sRegion varchar(50) ,@sCity varchar(50) ,@sSelfIntro varchar(2000) ,@sWorkYn varchar(10) ,@sOpenInfoYn varchar(10) ,@sPhoto varchar(10) ,@iSex int ,@sSpecialty varchar(50) ,@sUserLoginName varchar(50) ) WITH ENCRYPTION AS BEGIN begin tran addandup update tb_userRegInfo set fd_User_Name=@sUserTrueName,fd_nickName=@sNickName,fd_Email=@sUserEmail ,fd_mobile=@sMobile,fd_tel=@sTel,fd_qq=@sQq,fd_msn=@sMsn,fd_birthday=@sBirthday ,fd_region=@sRegion,fd_city=@sCity,fd_selfIntro=@sSelfIntro ,fd_workYn=@sWorkYn,fd_openInfoYn=@sOpenInfoYn,fd_photoFileName=@sPhoto ,fd_sex=@iSex,fd_Specialty=@sSpecialty where fd_userRegId=@iUserRegId; --同时修改学生表中的信息 update tb_Users set fd_User_Name=@sUserTrueName,fd_nickName=@sNickName,fd_Email=@sUserEmail ,fd_mobile=@sMobile,fd_tel=@sTel,fd_qq=@sQq,fd_msn=@sMsn,fd_birthday=@sBirthday ,fd_region=@sRegion,fd_city=@sCity,fd_selfIntro=@sSelfIntro ,fd_workYn=@sWorkYn,fd_openInfoYn=@sOpenInfoYn,fd_photoFileName=@sPhoto ,fd_sex=@iSex,fd_Specialty=@sSpecialty where fd_Login_Name=@sUserLoginName commit tran addandup IF @@ERROR <> 0 or @@rowcount > 2 begin rollback tran addandup end END我现在是这样 可以修改
汗你都commit了, 还怎么rollback啊。
沟沟说的对至少应该是IF @@ERROR <> 0 or @@rowcount > 2 begin rollback tran addandup end else commit tran addandup
update tb_userRegInfo set fd_User_Name=@sUserTrueName,fd_nickName=@sNickName,fd_Email=@sUserEmail ,fd_mobile=@sMobile,fd_tel=@sTel,fd_qq=@sQq,fd_msn=@sMsn,fd_birthday=@sBirthday ,fd_region=@sRegion,fd_city=@sCity,fd_selfIntro=@sSelfIntro ,fd_workYn=@sWorkYn,fd_openInfoYn=@sOpenInfoYn,fd_photoFileName=@sPhoto ,fd_sex=@iSex,fd_Specialty=@sSpecialty where fd_userRegId=@iUserRegId; --同时修改学生表中的信息 update tb_Users set fd_User_Name=@sUserTrueName,fd_nickName=@sNickName,fd_Email=@sUserEmail ,fd_mobile=@sMobile,fd_tel=@sTel,fd_qq=@sQq,fd_msn=@sMsn,fd_birthday=@sBirthday ,fd_region=@sRegion,fd_city=@sCity,fd_selfIntro=@sSelfIntro ,fd_workYn=@sWorkYn,fd_openInfoYn=@sOpenInfoYn,fd_photoFileName=@sPhoto ,fd_sex=@iSex,fd_Specialty=@sSpecialty where fd_Login_Name=@sUserLoginName先说下 这个到底返回的 @@rowcount 是多少?
--试下主体程序改如下 BEGIN declare @err int, @row1 int,@row2 int set @err=0 begin tran addandup update tb_userRegInfo set fd_User_Name=@sUserTrueName,fd_nickName=@sNickName,fd_Email=@sUserEmail ,fd_mobile=@sMobile,fd_tel=@sTel,fd_qq=@sQq,fd_msn=@sMsn,fd_birthday=@sBirthday ,fd_region=@sRegion,fd_city=@sCity,fd_selfIntro=@sSelfIntro ,fd_workYn=@sWorkYn,fd_openInfoYn=@sOpenInfoYn,fd_photoFileName=@sPhoto ,fd_sex=@iSex,fd_Specialty=@sSpecialty where fd_userRegId=@iUserRegId;
set @row1=@@rowcount --累計@@error set @err=@err+@@error --同时修改学生表中的信息 update tb_Users set fd_User_Name=@sUserTrueName,fd_nickName=@sNickName,fd_Email=@sUserEmail ,fd_mobile=@sMobile,fd_tel=@sTel,fd_qq=@sQq,fd_msn=@sMsn,fd_birthday=@sBirthday ,fd_region=@sRegion,fd_city=@sCity,fd_selfIntro=@sSelfIntro ,fd_workYn=@sWorkYn,fd_openInfoYn=@sOpenInfoYn,fd_photoFileName=@sPhoto ,fd_sex=@iSex,fd_Specialty=@sSpecialty where fd_Login_Name=@sUserLoginName set @row2=@@rowcount set @err=@err+@@error
IF @err = 0 and @row1=1 and @row2=1 commit tran addandup else rollback tran addandupEND
@@ERROR
Returns the error number for the last Transact-SQL statement executed.
返回最后一个SQL查询的错误代码@@ROWCOUNT
Returns the number of rows affected by the last statement.
返回最后一个查询的受影响行数
begin
rollback tran addandup
end 就是这个拉 我写>1 都改不了数据
(
@iUserRegId int
,@sUserTrueName varchar(50)
,@sNickName varchar(50)
,@sUserEmail varchar(50)
,@sMobile varchar(50)
,@sTel varchar(50)
,@sQq varchar(50)
,@sMsn varchar(50)
,@sBirthday varchar(50)
,@sRegion varchar(50)
,@sCity varchar(50)
,@sSelfIntro varchar(2000)
,@sWorkYn varchar(10)
,@sOpenInfoYn varchar(10)
,@sPhoto varchar(10)
,@iSex int
,@sSpecialty varchar(50)
,@sUserLoginName varchar(50)
)
WITH ENCRYPTION
AS
BEGIN
begin tran addandup
update tb_userRegInfo set fd_User_Name=@sUserTrueName,fd_nickName=@sNickName,fd_Email=@sUserEmail
,fd_mobile=@sMobile,fd_tel=@sTel,fd_qq=@sQq,fd_msn=@sMsn,fd_birthday=@sBirthday
,fd_region=@sRegion,fd_city=@sCity,fd_selfIntro=@sSelfIntro
,fd_workYn=@sWorkYn,fd_openInfoYn=@sOpenInfoYn,fd_photoFileName=@sPhoto
,fd_sex=@iSex,fd_Specialty=@sSpecialty
where fd_userRegId=@iUserRegId;
--同时修改学生表中的信息
update tb_Users set fd_User_Name=@sUserTrueName,fd_nickName=@sNickName,fd_Email=@sUserEmail
,fd_mobile=@sMobile,fd_tel=@sTel,fd_qq=@sQq,fd_msn=@sMsn,fd_birthday=@sBirthday
,fd_region=@sRegion,fd_city=@sCity,fd_selfIntro=@sSelfIntro
,fd_workYn=@sWorkYn,fd_openInfoYn=@sOpenInfoYn,fd_photoFileName=@sPhoto
,fd_sex=@iSex,fd_Specialty=@sSpecialty
where fd_Login_Name=@sUserLoginName
commit tran addandup
IF @@ERROR <> 0 or @@rowcount > 1
begin
rollback tran addandup
end
END我这样写 它就给我回滚了
如果是2个表。用这个没得用
(
@iUserRegId int
,@sUserTrueName varchar(50)
,@sNickName varchar(50)
,@sUserEmail varchar(50)
,@sMobile varchar(50)
,@sTel varchar(50)
,@sQq varchar(50)
,@sMsn varchar(50)
,@sBirthday varchar(50)
,@sRegion varchar(50)
,@sCity varchar(50)
,@sSelfIntro varchar(2000)
,@sWorkYn varchar(10)
,@sOpenInfoYn varchar(10)
,@sPhoto varchar(10)
,@iSex int
,@sSpecialty varchar(50)
,@sUserLoginName varchar(50)
)
WITH ENCRYPTION
AS
BEGIN
begin tran addandup
update tb_userRegInfo set fd_User_Name=@sUserTrueName,fd_nickName=@sNickName,fd_Email=@sUserEmail
,fd_mobile=@sMobile,fd_tel=@sTel,fd_qq=@sQq,fd_msn=@sMsn,fd_birthday=@sBirthday
,fd_region=@sRegion,fd_city=@sCity,fd_selfIntro=@sSelfIntro
,fd_workYn=@sWorkYn,fd_openInfoYn=@sOpenInfoYn,fd_photoFileName=@sPhoto
,fd_sex=@iSex,fd_Specialty=@sSpecialty
where fd_userRegId=@iUserRegId;
--同时修改学生表中的信息
update tb_Users set fd_User_Name=@sUserTrueName,fd_nickName=@sNickName,fd_Email=@sUserEmail
,fd_mobile=@sMobile,fd_tel=@sTel,fd_qq=@sQq,fd_msn=@sMsn,fd_birthday=@sBirthday
,fd_region=@sRegion,fd_city=@sCity,fd_selfIntro=@sSelfIntro
,fd_workYn=@sWorkYn,fd_openInfoYn=@sOpenInfoYn,fd_photoFileName=@sPhoto
,fd_sex=@iSex,fd_Specialty=@sSpecialty
where fd_Login_Name=@sUserLoginName
commit tran addandup
IF @@ERROR <> 0 or @@rowcount > 2
begin
rollback tran addandup
end
END我现在是这样 可以修改
还怎么rollback啊。
沟沟说的对至少应该是IF @@ERROR <> 0 or @@rowcount > 2
begin
rollback tran addandup
end
else
commit tran addandup
,fd_mobile=@sMobile,fd_tel=@sTel,fd_qq=@sQq,fd_msn=@sMsn,fd_birthday=@sBirthday
,fd_region=@sRegion,fd_city=@sCity,fd_selfIntro=@sSelfIntro
,fd_workYn=@sWorkYn,fd_openInfoYn=@sOpenInfoYn,fd_photoFileName=@sPhoto
,fd_sex=@iSex,fd_Specialty=@sSpecialty
where fd_userRegId=@iUserRegId;
--同时修改学生表中的信息
update tb_Users set fd_User_Name=@sUserTrueName,fd_nickName=@sNickName,fd_Email=@sUserEmail
,fd_mobile=@sMobile,fd_tel=@sTel,fd_qq=@sQq,fd_msn=@sMsn,fd_birthday=@sBirthday
,fd_region=@sRegion,fd_city=@sCity,fd_selfIntro=@sSelfIntro
,fd_workYn=@sWorkYn,fd_openInfoYn=@sOpenInfoYn,fd_photoFileName=@sPhoto
,fd_sex=@iSex,fd_Specialty=@sSpecialty
where fd_Login_Name=@sUserLoginName先说下 这个到底返回的 @@rowcount 是多少?
--试下主体程序改如下
BEGIN
declare @err int, @row1 int,@row2 int
set @err=0
begin tran addandup
update tb_userRegInfo set fd_User_Name=@sUserTrueName,fd_nickName=@sNickName,fd_Email=@sUserEmail
,fd_mobile=@sMobile,fd_tel=@sTel,fd_qq=@sQq,fd_msn=@sMsn,fd_birthday=@sBirthday
,fd_region=@sRegion,fd_city=@sCity,fd_selfIntro=@sSelfIntro
,fd_workYn=@sWorkYn,fd_openInfoYn=@sOpenInfoYn,fd_photoFileName=@sPhoto
,fd_sex=@iSex,fd_Specialty=@sSpecialty
where fd_userRegId=@iUserRegId;
set @row1=@@rowcount
--累計@@error
set @err=@err+@@error
--同时修改学生表中的信息
update tb_Users set fd_User_Name=@sUserTrueName,fd_nickName=@sNickName,fd_Email=@sUserEmail
,fd_mobile=@sMobile,fd_tel=@sTel,fd_qq=@sQq,fd_msn=@sMsn,fd_birthday=@sBirthday
,fd_region=@sRegion,fd_city=@sCity,fd_selfIntro=@sSelfIntro
,fd_workYn=@sWorkYn,fd_openInfoYn=@sOpenInfoYn,fd_photoFileName=@sPhoto
,fd_sex=@iSex,fd_Specialty=@sSpecialty
where fd_Login_Name=@sUserLoginName set @row2=@@rowcount
set @err=@err+@@error
IF @err = 0 and @row1=1 and @row2=1
commit tran addandup
else
rollback tran addandupEND