disallow results from triggers(服务器配置选项)

适用于:SQL Server

使用 disallow results from triggers 选项可控制是否让触发器返回结果集。 返回结果集的触发器可能会导致无法处理结果集的应用程序出现意外行为。

重要

SQL Server的未来版本中将删除从触发器返回结果集的功能。 避免在新的开发工作中从触发器返回结果集,并计划修改当前执行此操作的应用程序。 若要防止触发器返回结果集,请将“disallow results from triggers”选项设置为值 1。 在 SQL Server 的未来版本中,“disallow results from triggers”选项的默认设置将设置为 1

当设置为 1 时,“disallow results from triggers”选项将设置为 ON。 此选项的默认设置为 0 (OFF)。 如果将该选项设置为 1 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 时才能更改“disallow results from triggers”选项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 is an advanced option so that must be enabled first
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
GO

-- Set the disallow results from triggers option
EXEC sp_configure 'disallow results from triggers', 1;
EXEC 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

请参阅