SET (Transact-SQL)

Die Programmiersprache Transact-SQL bietet eine Reihe von SET-Anweisungen, mit denen die Verarbeitung bestimmter Informationen durch die aktuelle Sitzung geändert werden kann. Die SET-Anweisungen sind in die in der folgenden Tabelle gezeigten Kategorien unterteilt.

Kategorie Anweisungen

Datums- und Zeitanweisungen

SET DATEFIRST

SET DATEFORMAT

Sperranweisungen

SET DEADLOCK_PRIORITY

SET LOCK_TIMEOUT

Verschiedene Anweisungen

SET CONCAT_NULL_YIELDS_NULL

SET CURSOR_CLOSE_ON_COMMIT

SET FIPS_FLAGGER

SET IDENTITY_INSERT

SET LANGUAGE

SET OFFSETS

SET QUOTED_IDENTIFIER

Abfrageausführungsanweisungen

SET ARITHABORT

SET ARITHIGNORE

SET FMTONLY

SET NOCOUNT

SET NOEXEC

SET NUMERIC_ROUNDABORT

SET PARSEONLY

SET QUERY_GOVERNOR_COST_LIMIT

SET ROWCOUNT

SET TEXTSIZE

Anweisungen für SQL-92-Einstellungen

SET ANSI_DEFAULTS

SET ANSI_NULL_DFLT_OFF

SET ANSI_NULL_DFLT_ON

SET ANSI_NULLS

SET ANSI_PADDING

SET ANSI_WARNINGS

Statistikanweisungen

SET FORCEPLAN

SET SHOWPLAN_ALL

SET SHOWPLAN_TEXT

SET SHOWPLAN_XML

SET STATISTICS IO

SET STATISTICS XML

SET STATISTICS PROFILE

SET STATISTICS TIME

Transaktionsanweisungen

SET IMPLICIT_TRANSACTIONS

SET REMOTE_PROC_TRANSACTIONS

SET TRANSACTION ISOLATION LEVEL

SET XACT_ABORT

Überlegungen beim Verwenden von SET-Anweisungen

  • Alle SET-Anweisungen außer SET FIPS_FLAGGER, SET OFFSETS, SET PARSEONLY und SET QUOTED_IDENTIFIER werden zur Ausführungs- oder Laufzeit implementiert. Die genannten Anweisungen werden zur Analysezeit implementiert.
  • Wenn eine SET-Anweisung in einer gespeicherten Prozedur oder einem Trigger ausgeführt wird, so wird der Wert der SET-Option wiederhergestellt, nachdem die gespeicherte Prozedur oder der Trigger die Steuerung zurückgegeben hat. Wenn eine SET-Anweisung in einer dynamischen SQL-Zeichenfolge angegeben wird, die entweder mithilfe von sp_executesql oder mithilfe von EXECUTE ausgeführt wird, wird der Wert der SET-Option ebenfalls wiederhergestellt, nachdem der in der dynamischen SQL-Zeichenfolge angegebene Batch die Steuerung zurückgegeben hat.
  • Gespeicherte Prozeduren werden mit den SET-Einstellungen ausgeführt, die zur Ausführungszeit angegeben wurden. Ausgenommen hiervon sind SET ANSI_NULLS und SET QUOTED_IDENTIFIER. Gespeicherte Prozeduren, für die SET ANSI_NULLS oder SET QUOTED_IDENTIFIER angegeben ist, verwenden die Einstellung, die zur Erstellungszeit der gespeicherten Prozedur angegeben wurde. Bei Verwendung innerhalb einer gespeicherten Prozedur werden SET-Einstellungen ignoriert.
  • Die user options-Einstellung von sp_configure ermöglicht serverweite Einstellungen, und sie arbeitet datenbankübergreifend. Diese Einstellung wirkt außerdem wie eine explizite SET-Anweisung, mit der Ausnahme, dass sie zur Anmeldezeit erfolgt.
  • Datenbankeinstellungen, die mithilfe von ALTER DATABASE festgelegt werden, sind nur auf Datenbankebene gültig und treten nur dann in Kraft, wenn sie explizit festgelegt werden. Datenbankeinstellungen setzen Instanzoptionseinstellungen außer Kraft, die mithilfe von sp_configure festgelegt werden.
  • Bei jeder SET-Anweisung, die über die Einstellungen ON und OFF verfügt, können Sie die Einstellung ON oder OFF für mehrere SET-Optionen gleichzeitig angeben.
    ms190356.note(de-de,SQL.90).gifHinweis:
    Dies gilt nicht für die statistikbezogenen SET-Optionen.
    Beispielsweise legt `SET QUOTED_IDENTIFIER, ANSI_NULLS ON ` sowohl für QUOTED\_IDENTIFIER als auch für ANSI\_NULLS die Einstellung ON fest.
  • Einstellungen von SET-Anweisungen setzen die entsprechenden Einstellungen der Datenbankoptionen außer Kraft, die mithilfe von ALTER DATABASE festgelegt werden. Beispielsweise setzt der in einer SET ANSI_NULLS-Anweisung angegebene Wert die Datenbankeinstellung für ANSI_NULLs außer Kraft. Darüber hinaus werden einige Verbindungseinstellungen automatisch auf ON festgelegt, wenn ein Benutzer eine Verbindung zu einer Datenbank herstellt und dabei die Werte verwendet, die durch vorherige Verwendung der sp_configure user options-Einstellung in Kraft getreten sind oder die auf alle ODBC- und OLE DB-Verbindungen angewendet werden.
  • Die Anweisungen ALTER, CREATE und DROP DATABASE berücksichtigen die Einstellung von SET LOCK_TIMEOUT nicht.
  • Wenn eine globale oder zusammengefasste SET-Anweisung, wie z. B. SET ANSI_DEFAULTS, mehrere Einstellungen festlegt, setzt das Ausgeben einer solchen SET-Anweisung die vorherigen Einstellungen aller Optionen außer Kraft, auf die sich die zusammengefasste SET-Anweisung auswirkt. Wenn eine einzelne von einer zusammengefassten SET-Anweisung betroffene SET-Option explizit festgelegt wird, nachdem die zusammengefasste SET-Anweisung ausgegeben wurde, setzt die individuelle SET-Anweisung die entsprechenden Einstellungen der zusammengefassten SET-Anweisung außer Kraft.
  • Wenn Batches verwendet werden, wird der Datenbankkontext durch den Batch bestimmt, der mithilfe der USE-Anweisung eingerichtet wurde. Ad-hoc-Abfragen und alle anderen Anweisungen, die außerhalb der gespeicherten Prozedur ausgeführt werden und sich in Batches befinden, übernehmen die Optionseinstellungen der Datenbank und der Verbindung, die mit der USE-Anweisung eingerichtet wurden.
  • MARS-Anforderungen (Multiple Active Result Set) nutzen gemeinsam einen globalen Status, der die jeweils aktuellen Einstellungen der SET-Optionen für die Sitzung enthält. Bei der Ausführung kann jede Anforderung die SET-Optionen ändern. Die Änderungen gelten speziell für den Anforderungskontext, in dem sie festgelegt werden, und haben keine Auswirkungen auf andere gleichzeitige MARS-Anforderungen. Nachdem die Anforderungsausführung abgeschlossen ist, werden die neuen SET-Optionen jedoch in den globalen Status der Sitzung kopiert. Neue Anforderungen, die nach dieser Änderung unter der gleichen Sitzung ausgeführt werden, verwenden diese neuen SET-Optionseinstellungen.
  • Wird eine gespeicherte Prozedur aus einem Batch oder einer anderen gespeicherten Prozedur heraus ausgeführt, so wird sie anhand der aktuellen Optionswerte der Datenbank ausgeführt, die die gespeicherte Prozedur enthält. Wenn z. B. die gespeicherte Prozedur db1.dbo.sp1 die gespeicherte Prozedur db2.dbo.sp2 aufruft, wird die gespeicherte Prozedur sp1 unter der aktuellen Einstellung des Kompatibilitätsgrades von Datenbank db1 ausgeführt, und die gespeicherte Prozedur sp2 wird unter der aktuellen Einstellung des Kompatibilitätsgrades von Datenbank db2 ausgeführt.
  • Wenn eine Transact-SQL-Anweisung auf Objekte verweist, die in mehreren Datenbanken gespeichert sind, gelten der aktuelle Datenbankkontext und der aktuelle Verbindungskontext für die Anweisung. Befindet sich die Transact-SQL-Anweisung in diesem Fall in einem Batch, handelt es sich bei dem aktuellen Verbindungskontext um die durch die USE-Anweisung definierte Datenbank. Befindet sich die Transact-SQL-Anweisung in einer gespeicherten Prozedur, handelt es sich bei dem Verbindungskontext um die Datenbank, die die gespeicherte Prozedur enthält.
  • Beim Erstellen und Bearbeiten von Indizes für berechnete Spalten oder indizierten Sichten müssen die SET-Optionen ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER, ANSI_NULLS, ANSI_PADDING und ANSI_WARNINGS auf ON festgelegt sein. Die Option NUMERIC_ROUNDABORT muss auf OFF festgelegt sein.
    Ist eine der Optionen nicht auf den erforderlichen Wert festgelegt, schlagen die Aktionen INSERT, UPDATE, DELETE, DBCC CHECKDB und DBCC CHECKTABLE für indizierte Sichten oder Tabellen mit Indizes für berechnete Spalten fehl. SQL Server löst einen Fehler aus, in dem alle falsch festgelegten Optionen aufgelistet werden. Außerdem verarbeitet SQL Server die SELECT-Anweisungen in diesen Tabellen oder indizierten Sichten so, als seien die Indizes auf den berechneten Spalten oder Sichten nicht vorhanden.

Siehe auch

Andere Ressourcen

Verwenden von Optionen in SQL Server

Hilfe und Informationen

Informationsquellen für SQL Server 2005