Sql 触发器无法正常工作,正在删除到 logtable

Sql trigger not working correctly, deleting to logtable

此触发器旨在将密码更改记录到日志中table,当您更改密码时,旧密码会转到 table,它将对 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,如果 table 中有 5 行并且您更改了密码,最新的一个被插入,最旧的将被删除。但是,如果你有 2 个人(2 个 ID),一个仍然可以工作,但另一个会超过 5 到无穷大,我认为问题出在

AND beheerderID = (SELECT u.beheerderid FROM INSERTED u

我试过让它工作,但我不明白问题是什么,这使得解决问题有点困难:/

您遇到了该行的问题:

DELETE FROM logpassword WHERE changedate = (SELECT MIN(changedate) from logpassword) AND beheerderID = (SELECT u.beheerderid FROM INSERTED u)

当您检查 min(changedate) 时,您会得到所有用户的最小值,而不是只查看具有相同 beheerderid 的行。

更改您的子选择:

(SELECT MIN(changedate) from logpassword)

来自这个:

(SELECT MIN(changedate) from logpassword where beheerderID=(SELECT u.beheerderid FROM INSERTED u) )