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

时间:2015-06-08 07:59:02

标签: sql sql-server logging triggers

此触发器用于记录对日志表的密码更改,当您更改密码时,旧密码将转到表中,并且它将对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

我试图让它工作但我不明白问题是什么,这使得解决问题变得很难:/

1 个答案:

答案 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) )