Datenbankserverfehler "SET NOCOUNT OFF" in Triggern

Problem

Im Zuge einer Performance-Verbesserung in Version 12 wurde für MSSQL intern das Datenbankcursormodell an geeigneten Stellen von full-dynamic auf forward-only umgestellt, um eine Steigerung der Abfragegeschwindigkeiten zu erzielen. Dies hat jedoch u.U. zur Folge, dass abhängig von individuellen Solution-Triggern der Datenbankserver einen Fehler bezüglich der Serverkonfigurationsoption „Ergebnisse von Triggern nicht zulassen“ („NOCOUNT“) zurückliefert.

Das Datenbanksystem (Microsoft SQL Server 16.0) lieferte folgende Rückmeldung:
42000 A trigger returned a resultset and/or was running with SET NOCOUNT OFF while another outstanding result set was active.
(0x0000020B)

Lösung

Microsoft weist im Artikel Ergebnisse von Triggern nicht zulassen (Serverkonfigurationsoption) darauf hin, dass diese Option in einer künftigen Version von Microsoft SQL Server entfernt wird und auch nicht mehr verwendet werden bzw. auf dem Wert 1 (ON) stehen soll.

Möglichkeit 1

In den individuellen Triggern kann dies über die Option „SET NOCOUNT ON“ gesteuert werden.

Möglichkeit 2

Alternativ kann die Option auch über die gesamte Datenbankinstanz hinweg mittels der nachfolgenden Abfrage gesetzt werden, beachten Sie dabei aber unbedingt, dass damit das Verhalten sämtlicher Trigger dieser Instanz bestimmt wird.

EXEC sp_configure 'show advanced options', 1
reconfigure
EXEC sp_configure 'disallow results from triggers', 1
reconfigure
EXEC sp_configure 'show advanced options', 0
reconfigure

Den aktuellen Wert der Option auf Ihrer Datenbankinstanz können Sie über die nachfolgende Abfrage ermitteln.

SELECT [value]
FROM sys.configurations
WHERE [name] = N'disallow results from triggers'
2 „Gefällt mir“