Condividi tramite


Configurazione del server: non consentire i risultati dai trigger

Si applica a:SQL Server

Usare l'opzione disallow results from triggers per controllare se i trigger restituiscono set di risultati. I trigger che restituiscono set di risultati potrebbero causare comportamenti imprevisti nelle applicazioni che non sono progettati per usarli.

Importante

Nelle versioni future di SQL Server la possibilità di ottenere set di risultati dai trigger non sarà più disponibile. Evitare di restituire set di risultati dai trigger in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni che attualmente li restituiscono. Per impedire che i trigger restituiscano set di risultati, impostare l'opzione disallow results from triggers (Non consentire risultati dai trigger) su 1. L'impostazione predefinita per l'opzione Disallow results from triggers (Non consentire i risultati dai trigger) verrà impostata 1 su in una versione futura di SQL Server.

Se impostato su 1, l'opzione disallow results from triggers è impostata su ON. L'impostazione predefinita per questa opzione è 0 (OFF). Se l'opzione è impostata su1 (ON), qualsiasi tentativo da parte di un trigger di restituire un set di risultati ha esito negativo e l'utente riceve il messaggio di errore seguente:

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.

L'opzione disallow results from triggers viene applicata a livello di istanza di SQL Server e determina il comportamento per tutti i trigger esistenti all'interno dell'istanza.

L’opzione disallow results from triggers è un'opzione avanzata. Se si usa la sp_configure stored procedure di sistema per modificare l'impostazione, è possibile modificare i risultati non consentiti dai trigger solo quando show advanced options è impostato su 1. L'impostazione diventa effettiva immediatamente e non richiede il riavvio del server.

È possibile verificare se l'opzione è impostata correttamente usando il codice Transact-SQL seguente:

-- 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