登入觸發程序執行方針

此主題說明如何指定登入觸發程序的引發順序,以及管理登入觸發程序內的交易。

指定第一個和最後一個觸發程序

LOGON 事件可以定義多個觸發程序。您可以使用 sp_settriggerorder 系統預存程序,將這些觸發程序的其中任一個指定為對事件第一個或最後一個引發的觸發程序。SQL Server 不保證其他觸發程序的執行順序。如需詳細資訊,請參閱<設計及實作結構化儲存體 (Database Engine)>。

管理交易

在 SQL Server 引發登入觸發程序之前,SQL Server 會建立獨立於任何使用者交易以外的隱含交易。因此,當第一個登入觸發程序開始引發時,交易計數為 1。等到所有登入觸發程序完成執行之後,交易便認可。就如同其他類型的觸發程序一樣,如果登入觸發程序完成執行時的交易計數為 0,SQL Server 會傳回錯誤。ROLLBACK TRANSACTION 陳述式會將交易計數重設為 0 (即使該陳述式是從巢狀交易內發出)。COMMIT TRANSACTION 可能會將交易計數遞減為 0。因此建議不要從登入觸發程序內發出 COMMIT TRANSACTION 陳述式。

在登入觸發程序內使用 ROLLBACK TRANSACTION 陳述式時,請考慮下列事項:

  • 一直到 ROLLBACK TRANSACTION 的時間點所做的任何資料修改都會回復。這些修改包括目前觸發程序所做的修改,以及先前觸發程序對相同事件執行時所做的修改。該特定事件的任何其他觸發程序則不會執行。

  • 目前觸發程序會繼續執行 ROLLBACK 陳述式以後出現的任何其他陳述式。這其中若有任何修改資料的陳述式,修改動作並不會復原。

如果在對 LOGON 事件執行觸發程序時發生下列任一情況,不會建立使用者工作階段:

  • 原始隱含交易回復或失敗。

  • 觸發程序主體內引發嚴重性超過 20 的錯誤。