我在 sql server 2005 中有触发器,它检查重复记录,然后更新记录。
USE [CheckeCon]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[tgUserRoleExistForUpdate] ON [dbo].[Sec_UserRoles]
INSTEAD OF Update
AS
declare @UserRoleId int, @UserId int,@RoleId int, @FromDate datetime,@ToDate datetime,@CntlCreatedBy nvarchar,@CntlModifiedAt nvarchar,@CntlCurLockNo smallint;
select @UserRoleId=i.UserRoleId from inserted i;
select @UserId=i.UserId from inserted i;
select @RoleId=i.RoleId from inserted i;
select @FromDate=i.FromDate from inserted i;
select @ToDate=i.ToDate from inserted i;
select @CntlCreatedBy=i.CntlCreatedBy from inserted i;
select @CntlModifiedAt=i.CntlModifiedAt from inserted i;
select @CntlCurLockNo=i.CntlCurLockNo from inserted i;
BEGIN
-- BEGIN TRAN
IF NOT EXISTS
(
SELECT *
FROM Sec_UserRoles SEUR
JOIN inserted i ON
SEUR.RoleId = i.RoleId
AND SEUR.UserId = i.UserId
Where i.FromDate BETWEEN SEUR.FromDate AND SEUR.ToDate
)
Update Sec_UserRoles Set UserId = @UserId,RoleId = @RoleId,FromDate = @FromDate,ToDate = @ToDate,
CntlCreatedBy = @CntlCreatedBy,CntlModifiedAt = @CntlModifiedAt,CntlCurLockNo = @CntlCurLockNo Where UserRoleId = @UserRoleId
--Commit;
Else
RAISERROR('User Role Association Already Present',15,1);
--ROLLBACK;
End
但问题是它不能更新记录,只引发了我在触发器中给出的错误。如何使用触发器更新记录?