У меня есть таблица на SQL Сервере, который хранит историю паролей пользователей, чтобы пользователь не мог повторно использовать ранее использованный пароль.
CREATE TABLE user_password_histories
(
id BIGINT IDENTITY CONSTRAINT user_password_histories_pk PRIMARY KEY NONCLUSTERED
,password VARCHAR(128) NOT NULL
,user_id BIGINT NOT NULL
,created_at DATETIME DEFAULT GETUTCDATE() NOT NULL
,updated_at DATETIME
)
Однако я хочу поддерживать только список из 10 историй паролей для пользователя. Итак, я думаю использовать триггер, чтобы сохранить только 10 историй для каждого пользователя во время вставки.
Частичное решение, которое я придумал, это
CREATE TRIGGER trg_user_password_histories
ON user_password_histories
AFTER INSERT
AS
DELETE FROM user_password_histories
WHERE user_password_histories.user_id = Inserted.user_id // This will not work
AND user_password_histories.id NOT IN (SELECT t2.id
FROM user_password_histories t2
WHERE t2.id = user_password_histories.id
ORDER BY t2.created_at DESC
OFFSET 10 ROWS)
GO
Но проблема здесь что Inserted
может иметь несколько записей. Поэтому я не уверен, как решить эту проблему или как решить ее.