SET-Optionen mit Auswirkungen auf Ergebnisse
Aktualisiert: 14. April 2006
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ührungsplanes.
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
*In SQL Server 2005 wird durch Festlegen von ANSI_WARNINGS auf ON implizit ARITHABORT auf ON festgelegt, wenn der Datenbank-Kompatibilitätsgrad auf 90 festgelegt ist. Wenn der Datenbank-Kompatibilitätsgrad auf 80 oder niedriger festgelegt ist, muss die Option ARITHABORT explizit auf ON festgelegt werden.
Wenn die SET-Optionen nicht ordnungsgemäß festgelegt sind, können folgende Situationen auftreten:
- Das SQL Server 2005-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ührungsplanes 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 SQL-92-Standards und sind die empfohlenen Einstellungen für SQL Server. Weitere Informationen finden Sie unter Client-Netzwerkkonfiguration.
Hinweis: |
---|
Einige SQL Server-Dienstprogramme legen mindestens eine ANSI-Einstellung auf OFF fest, um die Kompatibilität mit früheren Versionen dieser Dienstprogramme 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.
Siehe auch
Konzepte
Erstellen von Indizes für berechnete Spalten
Verteilte Abfragen
Allgemeine Richtlinien zum Indexentwurf
Grundlagen des Indexentwurfs
SET-Optionen
Andere Ressourcen
Hilfe und Informationen
Informationsquellen für SQL Server 2005
Änderungsverlauf
Version | Verlauf |
---|---|
14. April 2006 |
|