此触发器用于记录对日志表的密码更改,当您更改密码时,旧密码将转到表中,并且它将对5个密码执行此操作,当它超过5时,它将删除最旧的密码,为新人提供空间
ALTER TRIGGER [dbo].[CheckCount]
ON [dbo].[LogPassword]
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON
DECLARE @nummer int
set @nummer = (Select count(*) from logpassword WHERE beheerderID = (SELECT u.beheerderid FROM INSERTED u))
IF (@nummer > 5)
BEGIN
DELETE FROM logpassword WHERE changedate = (SELECT MIN(changedate) from logpassword) AND beheerderID = (SELECT u.beheerderid FROM INSERTED u
END
这应该是从LogTable中删除最旧的行,现在当你只有1个ID,如果表中有5行,你更改密码,最新的一个插入,以及最老的将被删除。但是,如果你有2个人(2个ID),一个人仍然会工作,但另一个人将超过5到无穷大,我认为问题在于
AND beheerderID = (SELECT u.beheerderid FROM INSERTED u
我试图让它工作但我不明白问题是什么,这使得解决问题变得很难:/
答案 0 :(得分:1)
你遇到了问题:
DELETE FROM logpassword WHERE changedate = (SELECT MIN(changedate) from logpassword) AND beheerderID = (SELECT u.beheerderid FROM INSERTED u)
当您检查min(已更改)时,您将获得所有用户的最小值,而不是仅查看具有相同beheerderid的行。
更改您的子选择:
(SELECT MIN(changedate) from logpassword)
这一个:
(SELECT MIN(changedate) from logpassword where beheerderID=(SELECT u.beheerderid FROM INSERTED u) )