@ gbn ответа было недостаточно;даже если исключение будет обнаружено, вход в систему все равно будет неудачным.Как ни странно, я нашел другой ответ от @gbn, который проясняет решение: https://dba.stackexchange.com/a/8696/114706. Так вот мой способ убедиться, что исключения в триггере входа в систему не вызывают сбой всех входов в систему.Это может быть излишним, но так как исключения здесь могут быть действительно болезненными, я бы предпочел зайти слишком далеко, чем недостаточно.
CREATE TRIGGER trigLogon_Audit
ON ALL SERVER
FOR LOGON
AS
BEGIN
BEGIN TRY
--make sure that XACT_ABORT is off, or exceptions (even if caught), will cause all logins to fail.
DECLARE @XACT_ABORT_WasOn BIT = 0
IF (@@OPTIONS & 16384) = 16384
BEGIN
SET @XACT_ABORT_WasOn = 1
SET XACT_ABORT OFF; --this prevents any failure from killing the login.
END
--Put whatever logic you were trying to execute here; if there's a RETURN statement, make sure that XACT_ABORT gets set back to its original state.
END TRY
BEGIN CATCH
--Do nothing
END CATCH
--set XACT_ABORT back to its original state.
IF (@XACT_ABORT_WasOn = 1)
BEGIN
SET XACT_ABORT ON;
END
END