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) )
此触发器旨在将密码更改记录到日志中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) )