Если я понимаю ваши потребности, это должно работать. Я тестировал его на SQL 2008R2, но не вижу причин, по которым он не будет работать на SQL Server 2005.
Используйте триггер входа в систему, чтобы вставить строку в таблицу аудита.
Создайте триггер AFTER INSERT в вашей таблице аудита, который удаляет строку с MIN (ID).
Вот код для игры:
/ * Создать таблицу аудита * /
CREATE TABLE ServerLogonHistory
(SystemUser VARCHAR(512),
ID BIGINT,
DBUser VARCHAR(512),
SPID INT,
LogonTime DATETIME)
GO
/ * Создать триггер входа в систему * /
CREATE TRIGGER Tr_ServerLogon
ON ALL SERVER FOR LOGON
AS
BEGIN
INSERT INTO TestDB.dbo.ServerLogonHistory
SELECT SYSTEM_USER, MAX(ID)+1 , USER,@@SPID,GETDATE()
FROM TestDB.dbo.ServerLogonHistory;
END
GO
/ * Создать триггер очистки * /
CREATE TRIGGER AfterLogin
ON TestDB.dbo.ServerLogonHistory
AFTER INSERT
AS
DELETE
FROM TestDB.dbo.ServerLogonHistory
WHERE ID =
(SELECT MIN(ID) FROM TestDB.dbo.ServerLogonHistory);
GO;
Слово предупреждения. Если вы создадите неверный триггер входа в систему, вы не сможете войти в базу данных. Но не паникуйте! Это все часть обучения. Вы сможете использовать «sqlcmd», чтобы сбросить неверный триггер.
Я попытался удалить строку с идентификатором min в триггере входа в систему, но мне не удалось заставить это работать.