共用方式為


伺服器設定:不允許觸發程式的結果

適用於:SQL Server

使用選項 disallow results from triggers 來控制觸發程式是否傳回結果集。 傳回結果集的觸發程式可能會在未設計為使用它們的應用程式中造成非預期的行為。

重要

從觸發程序傳回結果集的能力將會在未來版本的 SQL Server 中移除。 請在新的開發工作中避免從觸發程序傳回結果集,並計畫修改目前如此運作的應用程式。 若要避免觸發程序傳回結果集,請將不允許來自觸發程序的結果選項更改為 1。 不允許觸發程式結果選項的預設設定將會在未來的 SQL Server 版本中設定為 1

當設定為 1時,選項 disallow results from triggers 會設定為 ON。 這個選項的預設值是 0 (OFF)。 若此選項設為 1 (ON),則觸發程序嘗試傳回結果集的任何動作都會失敗,而使用者會收到下列錯誤訊息:

Msg 524, Level 16, State 1, Procedure <Procedure Name>, Line <Line#>

A trigger returned a resultset and the server option 'disallow_results_from_triggers' is true.

disallow results from triggers 選項會在 SQL Server 執行個體層級套用,並決定執行個體內所有現有觸發程式的行為。

disallow results from triggers 選項為進階選項。 如果您使用 sp_configure 系統預存程序來變更設定,則只有在 show advanced options 設定為 時 1,才能變更不允許觸發程式的結果。 設定會立即生效,伺服器不必重新啟動。

您可以使用下列 Transact-SQL 程式代碼來檢查選項是否已設定正確:

-- Check the current value for the option
SELECT [name], value_in_use
FROM sys.configurations
WHERE [name] LIKE 'disallow results from triggers';

-- Set the disallow results from triggers option to 1. This option is an advanced option so that must be enabled first
EXECUTE sp_configure 'show advanced options', 1;

RECONFIGURE;
GO

-- Set the disallow results from triggers option
EXECUTE sp_configure 'disallow results from triggers', 1;
EXECUTE sp_configure 'show advanced options', 0;
RECONFIGURE;
GO

-- Validate that the option is set to 1
SELECT [name], value_in_use
FROM sys.configurations
WHERE [name] LIKE 'disallow results from triggers';
GO