SET-Optionen mit Auswirkungen auf Ergebnisse

Indizierte Sichten und Indizes für berechnete Spalten speichern für die spätere Verwendung Ergebnisse in der Datenbank. Diese gespeicherten Ergebnisse sind nur gültig, wenn alle Verbindungen, die auf die indizierte Sicht oder den Index für die berechnete Spalte verweisen, dasselbe Resultset generieren können wie die Verbindung, die den Index erstellt hat. Um sicherzustellen, dass die gespeicherten Ergebnisse ordnungsgemäß beibehalten werden und konsistente Ergebnisse liefern, müssen die SET-Optionen in der folgenden Tabelle auf die in der Spalte Erforderlicher Wert aufgeführten Werte festgelegt werden, wenn folgende Bedingungen zutreffen:

  • Für eine Sicht oder berechnete Spalte ist ein Index erstellt.

  • Eine berechnete Spalte ist definiert und PERSISTED ist angegeben.

  • Ein INSERT-, UPDATE- oder DELETE-Vorgang ändert die in der indizierten Sicht bzw. im Index für die berechnete Spalte gespeicherten Datenwerte. Dies beinhaltet Vorgänge wie BCP, DTS, Replikation und verteilte Abfragen.

  • Der Abfrageoptimierer verwendet den Index des Abfrageausführungsplans.

  • Für indizierte Sichten müssen die Optionen ANSI_NULLS und QUOTED_IDENTIFIER auf ON festgelegt werden, wenn die Sicht erstellt wird, weil diese beiden Einstellungen zusammen mit den Metadaten der Sicht gespeichert werden.

    SET-Optionen

    Erforderlicher Wert

    Serverstandardwert

    Standard

    OLE DB- und ODBC-Wert

    Standard

    DB-Library-Wert

    ANSI_NULLS

    ON

    OFF

    ON

    OFF

    ANSI_PADDING

    ON

    ON

    ON

    OFF

    ANSI_WARNINGS*

    ON

    OFF

    ON

    OFF

    ARITHABORT

    ON

    ON

    OFF

    OFF

    CONCAT_NULL_YIELDS_NULL

    ON

    OFF

    ON

    OFF

    NUMERIC_ROUNDABORT

    OFF

    OFF

    OFF

    OFF

    QUOTED_IDENTIFIER

    ON

    OFF

    ON

    OFF

    *Durch Festlegen von ANSI_WARNINGS auf ON wird implizit ARITHABORT auf ON festgelegt, wenn der Kompatibilitätsgrad der Datenbank auf 90 oder höher festgelegt ist. Wird der Kompatibilitätsgrad der Datenbank auf 80 oder niedriger festgelegt, muss die ARITHABORT-Option explizit auf ON festgelegt werden.

Wenn die SET-Optionen nicht ordnungsgemäß festgelegt sind, können folgende Situationen auftreten:

  • Das Database Engine (Datenbankmodul) generiert einen Fehler und führt ein Rollback aller INSERT-, UPDATE- oder DELETE-Anweisungen aus, die in dem Index gespeicherte Datenwerte ändern.

  • Der Abfrageoptimierer berücksichtigt den Index des Abfrageausführungsplans von Transact-SQL-Anweisungen nicht.

  • Die indizierte Sicht bzw. der Index für die berechnete Spalte kann nicht erstellt werden.

Festlegen von SET-Optionen für OLE DB- und ODBC-Verbindungen

Die meisten Anwendungen, einschließlich SQL Server Management Studio, Integration Services, Replikation und Massenkopiervorgänge, verwenden entweder den OLE DB-Anbieter für SQL Server oder den SQL Server-ODBC-Treiber, um Verbindungen mit Instanzen von SQL Server herzustellen. Die OLE DB- und ODBC-Standardeinstellungen sind für die sechs SET-Optionen geeignet, die für Indizes für Sichten und berechnete Spalten erforderlich sind. Die OLE DB- und ODBC-Standardwerte finden Sie in der obenstehenden Tabelle. Diese Einstellungen erzwingen die Regeln des ISO-Standards und sind die empfohlenen Einstellungen für SQL Server. Weitere Informationen finden Sie unter Client-Netzwerkkonfiguration.

HinweisHinweis

Einige SQL Server-Hilfsprogramme legen mindestens eine ANSI-Einstellung auf OFF fest, um die Kompatibilität mit früheren Versionen dieser Hilfsprogramme beizubehalten.

Festlegen von SET-Optionen für Verbindungen mit DB-Library und Embedded SQL für C

DB-Library- und Embedded SQL für C-Anwendungen legen standardmäßig keine Sitzungsoptionen fest. Deshalb müssen bei Systemen, die diese APIs verwenden, entweder die entsprechenden SET-Anweisungen für die Anwendungen ausgegeben werden oder die Datenbank- oder Serverstandardwerte auf die entsprechenden Einstellungen geändert werden.

Rangfolge zum Festlegen von Optionen

Die Einstellungen (ON oder OFF) für die SET-Optionen können auf mehreren Ebenen angegeben werden. Die endgültige Einstellung für jede Sitzungsoption wird durch den Vorgang mit der höchsten Rangfolge bestimmt, der diese Option festlegt. Beim Festlegen der Sitzungseinstellungen gilt die folgende Rangfolge (beginnend mit der höchsten Rangfolgenposition):

  • Jede Anwendung kann explizit Standardeinstellungen außer Kraft setzen, indem nach dem Herstellen einer Verbindung mit einem Server eine SET-Anweisung ausgeführt wird. Die SET-Anweisung setzt alle vorherigen Einstellungen außer Kraft und kann beim Ausführen der Anwendung zum dynamischen Aktivieren bzw. Deaktivieren von Optionen verwendet werden. Die Optionseinstellungen gelten nur für die aktuelle Sitzung.

  • OLE DB- und ODBC-Anwendungen können die Optionseinstellungen angeben, die bei der Verbindung wirksam sind, indem Optionseinstellungen in Verbindungszeichenfolgen angegeben werden. Die Optionseinstellungen gelten nur für die aktuelle Sitzung.

  • SET-Optionen, die mithilfe der ODBC-Anwendung in der Systemsteuerung oder der ODBC-Funktion SQLConfigDataSource für eine ODBC-Datenquelle von SQL Server angegeben wurden.

  • Standardeinstellungen einer Datenbank. Sie können diese Werte angeben, indem Sie die ALTER DATABASE-Anweisung oder den Objekt-Explorer in SQL Server Management Studio verwenden.

  • Standardeinstellungen eines Servers. Sie können diese Werte entweder mithilfe von sp_configure oder über den Objekt-Explorer in SQL Server Management Studio angeben, um die Serverkonfigurationsoption namens user options festzulegen.

Wenn beispielsweise der ODBC-Standardwert für ANSI_NULLS auf ON festgelegt ist, können Sie diesen Wert außer Kraft setzen, indem Sie diese Option in einer ODBC-Verbindungszeichenfolge auf OFF festlegen, oder indem Sie SET-Anweisungen verwenden, nachdem die Verbindung mit der Datenbank hergestellt ist.

Gespeicherte Prozeduren und Trigger

Gespeicherte Prozeduren und Trigger sollten so geschrieben sein, dass sie mit den sechs SET-Optionen zusammen verwendet werden können, die für die Unterstützung von Indizes für Sichten und berechnete Spalten erforderlich sind. Der Abfrageoptimierer verwendet die Indizes von Sichten oder berechneten Spalten nicht in von gespeicherten Prozeduren oder Triggern ausgeführten SELECT-Anweisungen, wenn die SET-Optionen nicht ordnungsgemäß festgelegt sind. INSERT-, UPDATE- oder DELETE-Anweisungen in gespeicherten Prozeduren oder Triggern, die in der indizierten Sicht bzw. im Index für die berechnete Spalte gespeicherte Datenwerte ändern, generieren Fehler.

Weitere Überlegungen

Die SET-Anweisung kann die Sitzungsoptionen dynamisch ändern; aus diesem Grund müssen Sie beim Ausgeben von SET-Anweisungen in einer Datenbank, die Indizes für Sichten und berechnete Spalten aufweist, vorsichtig vorgehen. Eine Anwendung kann beispielsweise eine Verbindung herstellen, deren Standardeinstellungen Verweise auf indizierte Sichten oder Indizes für berechnete Spalten zulassen. Wenn die Verbindung jedoch eine gespeicherte Prozedur oder einen Trigger aufruft, deren bzw. dessen erste Anweisung SET ANSI_WARNINGS OFF ist, setzt diese Anweisung vorhergehende Standard- oder sonstige Einstellungen für ANSI_WARNINGS außer Kraft. In diesem Fall ignoriert der Abfrageoptimierer bei der Verarbeitung von Anweisungen in der gespeicherten Prozedur bzw. im Trigger alle indizierten Sichten oder Indizes für berechnete Spalten.

Drei andere Sitzungsoptionen können das Format von Resultsets potenziell beeinflussen: DATEFIRST, DATEFORMAT und LANGUAGE. Alle Funktionen, deren Ergebnisse durch Änderungen dieser Optionen betroffen wären, sind als nicht deterministisch klassifiziert und können nicht in indizierten Sichten oder Indizes für berechnete Spalten verwendet werden.