Hinweise (Transact-SQL): TabelleHints (Transact-SQL) - Table

Gilt für: JaSQL Server JaAzure SQL-Datenbank NeinAzure Synapse Analytics (SQL DW) NeinParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Tabellenhinweise überschreiben das Standardverhalten des Abfrageoptimierers für die Dauer der DML-Anweisung (Data Manipulation Language, Datenbearbeitungssprache) durch Angabe einer Sperrmethode, eines Index oder mehrerer Indizes, eines Abfrageverarbeitungsvorgangs, beispielsweise einen Tabellenscan oder eine Indexsuche, oder anderer Optionen.Table hints override the default behavior of the query optimizer for the duration of the data manipulation language (DML) statement by specifying a locking method, one or more indexes, a query-processing operation such as a table scan or index seek, or other options. Tabellenhinweise werden in der FROM-Klausel der DML-Anweisung angegeben und wirken sich nur auf die Tabelle oder Sicht aus, auf die in der betreffenden Klausel verwiesen wird.Table hints are specified in the FROM clause of the DML statement and affect only the table or view referenced in that clause.

Achtung

Da der SQL ServerSQL Server-Abfrageoptimierer in der Regel den optimalen Ausführungsplan für eine Abfrage auswählt, wird empfohlen, dass erfahrene Entwickler und Datenbankadministratoren Hinweise nur dann verwenden, wenn alle anderen Möglichkeiten sich als unzureichend erwiesen haben.Because the SQL ServerSQL Server query optimizer typically selects the best execution plan for a query, we recommend that hints be used only as a last resort by experienced developers and database administrators.

Gilt für:Applies to:

DELETEDELETE

INSERTINSERT

SELECTSELECT

UPDATEUPDATE

MERGEMERGE

Themenlinksymbol Transact-SQL-SyntaxkonventionenTopic link icon Transact-SQL Syntax Conventions

SyntaxSyntax

WITH  ( <table_hint> [ [, ]...n ] )  
  
<table_hint> ::=   
[ NOEXPAND ] {   
    INDEX  ( index_value [ ,...n ] )   
  | INDEX =  ( index_value )      
  | FORCESEEK [( index_value ( index_column_name  [ ,... ] ) ) ]  
  | FORCESCAN  
  | FORCESEEK  
  | HOLDLOCK   
  | NOLOCK   
  | NOWAIT  
  | PAGLOCK   
  | READCOMMITTED   
  | READCOMMITTEDLOCK   
  | READPAST   
  | READUNCOMMITTED   
  | REPEATABLEREAD   
  | ROWLOCK   
  | SERIALIZABLE   
  | SNAPSHOT   
  | SPATIAL_WINDOW_MAX_CELLS = integer  
  | TABLOCK   
  | TABLOCKX   
  | UPDLOCK   
  | XLOCK   
}   
  
<table_hint_limited> ::=  
{  
    KEEPIDENTITY   
  | KEEPDEFAULTS   
  | HOLDLOCK   
  | IGNORE_CONSTRAINTS   
  | IGNORE_TRIGGERS   
  | NOLOCK   
  | NOWAIT  
  | PAGLOCK   
  | READCOMMITTED   
  | READCOMMITTEDLOCK   
  | READPAST   
  | REPEATABLEREAD   
  | ROWLOCK   
  | SERIALIZABLE   
  | SNAPSHOT   
  | TABLOCK   
  | TABLOCKX   
  | UPDLOCK   
  | XLOCK   
}   

ArgumenteArguments

WITH ( <<table_hint> ) [ [ , ]...n ]WITH ( <table_hint> ) [ [, ]...n ]
Bis auf einige Ausnahmen werden Tabellenhinweise nur dann in der FROM-Klausel unterstützt, wenn die Hinweise mit dem WITH-Schlüsselwort angegeben werden.With some exceptions, table hints are supported in the FROM clause only when the hints are specified with the WITH keyword. Tabellenhinweise müssen zudem mit Klammern angegeben werden.Table hints also must be specified with parentheses.

Wichtig

Das WITH-Schlüsselwort wegzulassen ist eine veraltete Funktion: Dieses Feature befindet sich im Wartungsmodus und wird möglicherweise in einer künftigen Version von Microsoft SQL Server entfernt.This feature is in maintenance mode and may be removed in a future version of Microsoft SQL Server. Nutzen Sie diese Funktionen bei Neuentwicklungen nicht mehr, und planen Sie die Änderung von Anwendungen, die diese Funktion zurzeit verwenden.Avoid using this feature in new development work, and plan to modify applications that currently use this feature.Omitting the WITH keyword is a deprecated feature: Dieses Feature befindet sich im Wartungsmodus und wird möglicherweise in einer künftigen Version von Microsoft SQL Server entfernt.This feature is in maintenance mode and may be removed in a future version of Microsoft SQL Server. Nutzen Sie diese Funktionen bei Neuentwicklungen nicht mehr, und planen Sie die Änderung von Anwendungen, die diese Funktion zurzeit verwenden.Avoid using this feature in new development work, and plan to modify applications that currently use this feature.

Die folgenden Tabellenhinweise sind mit und ohne WITH-Schlüsselwort zulässig: NOLOCK, READUNCOMMITTED, UPDLOCK, REPEATABLEREAD, SERIALIZABLE, READCOMMITTED, TABLOCK, TABLOCKX, PAGLOCK, ROWLOCK, NOWAIT, READPAST, XLOCK, SNAPSHOT und NOEXPAND.The following table hints are allowed with and without the WITH keyword: NOLOCK, READUNCOMMITTED, UPDLOCK, REPEATABLEREAD, SERIALIZABLE, READCOMMITTED, TABLOCK, TABLOCKX, PAGLOCK, ROWLOCK, NOWAIT, READPAST, XLOCK, SNAPSHOT, and NOEXPAND. Wenn diese Tabellenhinweise ohne das WITH-Schlüsselwort angegeben werden, sollten die Hinweise allein angegeben werden.When these table hints are specified without the WITH keyword, the hints should be specified alone. Beispiel:For example:

FROM t (TABLOCK)  

Wenn der Hinweis mit einer anderen Option angegeben wird, muss er mit dem WITH-Schlüsselwort angegeben werden:When the hint is specified with another option, the hint must be specified with the WITH keyword:

FROM t WITH (TABLOCK, INDEX(myindex))  

Es wird empfohlen, Tabellenhinweise durch Kommas voneinander zu trennen.We recommend using commas between table hints.

Wichtig

Hinweise statt durch Kommas durch Leerzeichen zu trennen ist eine veraltete Funktion: Dieses Feature wird in einer künftigen Version von Microsoft SQL Server entfernt.This feature will be removed in a future version of Microsoft SQL Server. Verwenden Sie dieses Feature nicht in einer neuen Entwicklungsarbeit, und ändern Sie Anwendungen, die dieses Feature verwenden, so schnell wie möglich.Do not use this feature in new development work, and modify applications that currently use this feature as soon as possible.Separating hints by spaces rather than commas is a deprecated feature: Dieses Feature wird in einer künftigen Version von Microsoft SQL Server entfernt.This feature will be removed in a future version of Microsoft SQL Server. Verwenden Sie dieses Feature nicht in einer neuen Entwicklungsarbeit, und ändern Sie Anwendungen, die dieses Feature verwenden, so schnell wie möglich.Do not use this feature in new development work, and modify applications that currently use this feature as soon as possible.

NOEXPANDNOEXPAND
Gibt an, dass indizierte Sichten nicht für den Zugriff auf zugrunde liegende Tabellen erweitert werden, wenn der Abfrageoptimierer die Abfrage verarbeitet.Specifies that any indexed views are not expanded to access underlying tables when the query optimizer processes the query. Der Abfrageoptimierer behandelt die Sicht wie eine Tabelle mit einem gruppierten Index.The query optimizer treats the view like a table with clustered index. NOEXPAND gilt nur für indizierte Sichten.NOEXPAND applies only to indexed views. Weitere Informationen finden Sie unter Verwenden von NOEXPAND.For more information, see Using NOEXPAND.

INDEX ( index_value [ , ... n ] ) | INDEX = ( index_value )INDEX (index_value [,... n ] ) | INDEX = ( index_value)
Mit der INDEX()-Syntax werden die Namen oder IDs der Indizes angegeben, die der Abfrageoptimierer beim Verarbeiten der Anweisung verwenden soll.The INDEX() syntax specifies the names or IDs of one or more indexes to be used by the query optimizer when it processes the statement. Die alternative INDEX = Syntax gibt einen einzigen Indexwert an.The alternative INDEX = syntax specifies a single index value. Pro Tabelle ist nur ein Indexhinweis zulässig.Only one index hint per table can be specified.

Falls ein gruppierter Index vorhanden ist, erzwingt INDEX(0) einen Scan des gruppierten Index, und INDEX(1) erzwingt einen Scan des gruppierten Index oder eine Suche im gruppierten Index.If a clustered index exists, INDEX(0) forces a clustered index scan and INDEX(1) forces a clustered index scan or seek. Falls kein gruppierter Index vorhanden ist, erzwingt INDEX(0) einen Tabellenscan, und INDEX(1) wird als Fehler interpretiert.If no clustered index exists, INDEX(0) forces a table scan and INDEX(1) is interpreted as an error.

Werden mehrere Indizes in einer einzigen Hinweisliste verwendet, werden Duplikate ignoriert, und die übrigen aufgeführten Indizes werden verwendet, um die Zeilen aus der Tabelle abzurufen.If multiple indexes are used in a single hint list, the duplicates are ignored and the rest of the listed indexes are used to retrieve the rows of the table. Die Reihenfolge der Indizes im Indexhinweis ist von Bedeutung.The order of the indexes in the index hint is significant. Mehrere Indexhinweise erzwingen die AND-Verknüpfung der Indizes, und der Abfrageoptimierer versucht, so viele Bedingungen wie möglich auf jeden verwendeten Index anzuwenden.A multiple index hint also enforces index ANDing, and the query optimizer applies as many conditions as possible on each index accessed. Falls die Auflistung der Indexhinweise nicht alle in der Abfrage referenzierten Spalten umfasst, wird ein Abrufvorgang ausgeführt, um die restlichen Spalten abzurufen, nachdem SQL Server-Datenbank-EngineSQL Server Database Engine alle indizierten Spalten abgerufen hat.If the collection of hinted indexes do not include all columns referenced by the query, a fetch is performed to retrieve the remaining columns after the SQL Server-Datenbank-EngineSQL Server Database Engine retrieves all the indexed columns.

Hinweis

Wenn ein Indexhinweis, der auf mehrere Indizes verweist, in der Faktentabelle eines Sternjoins verwendet wird, ignoriert der Optimierer den Indexhinweis und gibt eine Warnmeldung zurück.When an index hint referring to multiple indexes is used on the fact table in a star join, the optimizer ignores the index hint and returns a warning message. Außerdem ist die OR-verknüpfte Indexsuche für Tabellen mit einem Indexhinweis nicht zulässig.Also, index ORing is not allowed for a table with an index hint specified.

Die maximale Anzahl nicht gruppierter Indizes im Tabellenhinweis beträgt 250.The maximum number of indexes in the table hint is 250 nonclustered indexes.

KEEPIDENTITYKEEPIDENTITY
Gilt nur in einer INSERT-Anweisung, wenn die BULK-Option mit OPENROWSET verwendet wird.Is applicable only in an INSERT statement when the BULK option is used with OPENROWSET.

Gibt an, dass der oder die Identitätswerte in der importierten Datendatei für die Identitätsspalte verwendet werden sollen.Specifies that identity value or values in the imported data file are to be used for the identity column. Wird KEEPIDENTITY nicht angegeben, werden die Identitätswerte für diese Spalte zwar überprüft, nicht jedoch importiert, und der Abfrageoptimierer weist auf der Grundlage von Ausgangswerten und den inkrementellen Werten, die beim Erstellen der Tabelle angegeben wurden, eindeutige Werte zu.If KEEPIDENTITY is not specified, the identity values for this column are verified but not imported and the query optimizer automatically assigns unique values based on the seed and increment values specified during table creation.

Wichtig

Wenn die Datendatei keine Werte für die Identitätsspalte in der Tabelle oder Sicht enthält und die Identitätsspalte nicht die letzte Spalte der Tabelle ist, müssen Sie die Identitätsspalte überspringen.If the data file does not contain values for the identity column in the table or view, and the identity column is not the last column in the table, you must skip the identity column. Weitere Informationen finden Sie unter Auslassen eines Datenfelds mithilfe einer Formatdatei (SQL Server).For more information, see Use a Format File to Skip a Data Field (SQL Server). Wenn eine Identitätsspalte erfolgreich übersprungen wird, weist der Abfrageoptimierer der Identitätsspalte in den importierten Tabellenzeilen automatisch eindeutige Werte zu.If an identity column is skipped successfully, the query optimizer automatically assigns unique values for the identity column into the imported table rows.

Ein Beispiel, in dem dieser Hinweis in einer INSERT ... SELECT * FROM OPENROWSET(BULK...)-Anweisung verwendet wird, finden Sie unter Beibehalten von Identitätswerten beim Massenimport von Daten (SQL Server).For an example that uses this hint in an INSERT ... SELECT * FROM OPENROWSET(BULK...) statement, see Keep Identity Values When Bulk Importing Data (SQL Server).

Weitere Informationen zum Überprüfen des Identitätswerts für eine Tabelle finden Sie unter DBCC CHECKIDENT (Transact-SQL).For information about checking the identity value for a table, see DBCC CHECKIDENT (Transact-SQL).

KEEPDEFAULTSKEEPDEFAULTS
Gilt nur in einer INSERT-Anweisung, wenn die BULK-Option mit OPENROWSET verwendet wird.Is applicable only in an INSERT statement when the BULK option is used with OPENROWSET.

Gibt an, dass statt NULL der Standardwert einer Tabellenspalte (falls vorhanden) einzufügen ist, wenn der Datensatz keinen Wert für die Spalte aufweist.Specifies insertion of a table column's default value, if any, instead of NULL when the data record lacks a value for the column.

Ein Beispiel für die Verwendung dieses Hinweises in einer INSERT ... SELECT * FROM OPENROWSET(BULK...)-Anweisung finden Sie unter Beibehalten von NULL-Werten oder Verwenden von Standardwerten während des Massenimports (SQL Server).For an example that uses this hint in an INSERT ... SELECT * FROM OPENROWSET(BULK...) statement, see Keep Nulls or Use Default Values During Bulk Import (SQL Server).

FORCESEEK [ ( index_value ( index_column_name [ , ... n ] )) ]FORCESEEK [ (index_value(index_column_name [ ,... n ] )) ]
Gibt an, dass der Abfrageoptimierer nur einen Indexsuchvorgang als Zugriffspfad auf die in der Tabelle oder Sicht angegebenen Daten verwenden darf.Specifies that the query optimizer use only an index seek operation as the access path to the data in the table or view.

Hinweis

Ab SQL Server 2008 R2SQL Server 2008 R2 SP1 können auch Indexparameter angegeben werden.Starting with SQL Server 2008 R2SQL Server 2008 R2 SP1, index parameters can also be specified. Der Abfrageoptimierer berücksichtigt in diesem Fall nur Indexsuchvorgänge über den angegebenen Index mit mindestens den angegebenen Indexspalten.In that case, the query optimizer considers only index seek operations through the specified index using at least the specified index columns.

index_valueindex_value
Dies ist der Indexname oder der ID-Wert des Indexes.Is the index name or index ID value. Die Index-ID 0 (Heap) kann nicht angegeben werden.The index ID 0 (heap) cannot be specified. Wenn der Indexname oder die ID zurückgegeben werden soll, fragen Sie die sys.indexes-Katalogsicht ab.To return the index name or ID, query the sys.indexes catalog view.

index_column_nameindex_column_name
Dies ist der Name der Indexspalte, die in den Suchvorgang einbezogen werden soll.Is the name of the index column to include in the seek operation. Die Angabe von FORCESEEK mit Indexparametern ähnelt der Verwendung von FORCESEEK mit einem INDEX-Hinweis.Specifying FORCESEEK with index parameters is similar to using FORCESEEK with an INDEX hint. Sie können jedoch eine genauere Steuerung des vom Abfrageoptimierer verwendeten Zugriffspfads erreichen, indem Sie den Index, in dem die Suche stattfinden soll, und außerdem die Indexspalten angeben, die im Suchvorgang berücksichtigt werden sollen.However, you can achieve greater control over the access path used by the query optimizer by specifying both the index to seek on and the index columns to consider in the seek operation. Der Optimierer kann bei Bedarf zusätzliche Spalten einbeziehen.The optimizer may consider additional columns if needed. Wenn beispielsweise ein nicht gruppierter Index angegeben wird, kann der Optimierer neben den angegebenen Spalten auch die Schlüsselspalten gruppierter Indizes verwenden.For example, if a nonclustered index is specified, the optimizer may choose to use clustered index key columns in addition to the specified columns.

Der FORCESEEK-Hinweis kann folgendermaßen angegeben werden:The FORCESEEK hint can be specified in the following ways.

SyntaxSyntax BeispielExample und BeschreibungDescription
Ohne Index oder INDEX-HinweisWithout an index or INDEX hint FROM dbo.MyTable WITH (FORCESEEK) Der Abfrageoptimierer berücksichtigt nur Indexsuchvorgänge für den Zugriff auf die Tabelle oder Sicht über einen beliebigen relevanten Index.The query optimizer considers only index seek operations to access the table or view through any relevant index.
Mit einem INDEX-Hinweis kombiniertCombined with an INDEX hint FROM dbo.MyTable WITH (FORCESEEK, INDEX (MyIndex)) Der Abfrageoptimierer berücksichtigt nur Indexsuchvorgänge für den Zugriff auf die Tabelle oder Sicht über den angegebenen Index.The query optimizer considers only index seek operations to access the table or view through the specified index.
Durch Angabe eines Index und von Indexspalten parametrisiertParameterized by specifying an index and index columns FROM dbo.MyTable WITH (FORCESEEK (MyIndex (col1, col2, col3))) Der Abfrageoptimierer berücksichtigt nur Indexsuchvorgänge für den Zugriff auf die Tabelle oder Sicht über den angegebenen Index mit mindestens den angegebenen Indexspalten.The query optimizer considers only index seek operations to access the table or view through the specified index using at least the specified index columns.

Beachten Sie bei Verwendung des FORCESEEK-Hinweises (mit oder ohne Parameter) die folgenden Richtlinien:When using the FORCESEEK hint (with or without index parameters), consider the following guidelines:

  • Der Hinweis kann als Tabellenhinweis oder Abfragehinweis angegeben werden.The hint can be specified as a table hint or as a query hint. Weitere Informationen zu Abfragehinweisen finden Sie unter Abfragehinweise (Transact-SQL).For more information about query hints, see Query Hints (Transact-SQL).
  • Zum Anwenden von FORCESEEK auf eine indizierte Sicht muss auch der NOEXPAND-Hinweis angegeben werden.To apply FORCESEEK to an indexed view, the NOEXPAND hint must also be specified.
  • Der Hinweis kann höchstens einmal pro Tabelle oder Sicht angewendet werden.The hint can be applied at most once per table or view.
  • Der Hinweis kann nicht für eine Remotedatenquelle angegeben werden.The hint cannot be specified for a remote data source. Fehler 7377 wird zurückgegeben, wenn FORCESEEK mit einem Indexhinweis angegeben wird, Fehler 8180 wird zurückgegeben, wenn FORCESEEK ohne Indexhinweis angegeben wird.Error 7377 is returned when FORCESEEK is specified with an index hint and error 8180 is returned when FORCESEEK is used without an index hint.
  • Wenn die Verwendung von FORCESEEK bewirkt, dass kein Plan gefunden wird, dann wird der Fehler 8622 zurückgegeben.If FORCESEEK causes no plan to be found, error 8622 is returned.

Bei Angabe von FORCESEEK mit Indexparametern gelten die folgenden Richtlinien und Einschränkungen:When FORCESEEK is specified with index parameters, the following guidelines and restrictions apply:

  • Der Hinweis kann nicht für Tabellen angegeben werden, die Ziel einer INSERT-, UPDATE- oder DELETE-Anweisung sind.The hint cannot be specified for a table that is the target of an INSERT, UPDATE, or DELETE statement.
  • Der Hinweis kann nicht zusammen mit einem INDEX-Hinweis oder einem anderen FORCESEEK-Hinweis angegeben werden.The hint cannot be specified in combination with either an INDEX hint or another FORCESEEK hint.
  • Mindestens eine Spalte muss angegeben werden, bei der es sich um die führende Schlüsselspalte handeln muss.At least one column must be specified and it must be the leading key column.
  • Zusätzliche Indexspalten können angegeben, Schlüsselspalte jedoch nicht übersprungen werden.Additional index columns can be specified, however, key columns cannot be skipped. Wenn der angegebene Index beispielsweise die Schlüsselspalten a, b und c enthält, sind FORCESEEK (MyIndex (a)) und FORCESEEK (MyIndex (a, b) als Syntax gültig.For example, if the specified index contains the key columns a, b, and c, valid syntax would include FORCESEEK (MyIndex (a)) and FORCESEEK (MyIndex (a, b). Ungültige Syntax wäre FORCESEEK (MyIndex (c)) und FORCESEEK (MyIndex (a, c).Invalid syntax would include FORCESEEK (MyIndex (c)) and FORCESEEK (MyIndex (a, c).
  • Die Reihenfolge der im Hinweis angegebenen Spaltennamen muss der Reihenfolge der Spalten im referenzierten Index entsprechen.The order of column names specified in the hint must match the order of the columns in the referenced index.
  • Spalten, die nicht in der Indexschlüsseldefinition vorhanden sind, können nicht angegeben werden.Columns that are not in the index key definition cannot be specified. Beispielsweise können in einem nicht gruppierten Index nur die definierten Indexschlüsselspalten angegeben werden.For example, in a nonclustered index, only the defined index key columns can be specified. Gruppierte Schlüsselspalten, die automatisch in den Index einbezogen werden, können nicht angegeben, aber vom Optimierer verwendet werden.Clustered key columns that are automatically included in the index cannot be specified, but may be used by the optimizer.
  • Ein speicheroptimierter xVelocity-columnstore-Index kann nicht als Indexparameter angegeben werden.An xVelocity memory optimized columnstore index cannot be specified as an index parameter. Fehler 366 wird zurückgegeben.Error 366 is returned.
  • Nach einer Änderungen der Indexdefinition (z. B. durch Hinzufügen oder Entfernen von Spalten) können Änderungen an den Abfragen erforderlich sein, die auf den betreffenden Index verweisen.Modifying the index definition (for example, by adding or removing columns) may require modifications to the queries that reference that index.
  • Der Hinweis verhindert, dass der Optimierer räumliche oder XML-Indizes für die Tabelle berücksichtigt.The hint prevents the optimizer from considering any spatial or XML indexes on the table.
  • Der Hinweis kann nicht zusammen mit dem FORCESCAN-Hinweis angegeben werden.The hint cannot be specified in combination with the FORCESCAN hint.
  • Bei partitionierten Indizes kann die von SQL ServerSQL Server implizit hinzugefügte Partitionierungsspalte nicht im FORCESEEK-Hinweise angegeben werden.For partitioned indexes, the partitioning column implicitly added by SQL ServerSQL Server cannot be specified in the FORCESEEK hint.

Achtung

Bei Angabe von FORCESEEK mit Parametern wird die Anzahl von Plänen, die vom Optimierer berücksichtigt werden können, stärker eingeschränkt als bei Angabe von FORCESEEK ohne Parameter.Specifying FORCESEEK with parameters limits the number of plans that can be considered by the optimizer more than when specifying FORCESEEK without parameters. Dies kann dazu führen, dass der Plan cannot be generated-Fehler in mehreren Fällen auftritt.This may cause a Plan cannot be generated error to occur in more cases. In zukünftigen Releases können durch interne Änderungen des Abfrageoptimierers möglicherweise mehr Pläne berücksichtigt werden.In a future release, internal modifications to the query optimizer may allow more plans to be considered.

FORCESCAN gilt für: SQL Server 2008 R2SQL Server 2008 R2 SP1 und höher.FORCESCAN Applies to: SQL Server 2008 R2SQL Server 2008 R2 SP1 and later. Gibt an, dass der Abfrageoptimierer nur einen Indexscanvorgang als Zugriffspfad auf die referenzierte Tabelle oder Sicht verwenden darf.Specifies that the query optimizer use only an index scan operation as the access path to the referenced table or view. Der FORCESCAN-Hinweis kann bei Abfragen nützlich sein, in denen der Optimierer die Anzahl betroffener Zeilen unterschätzt und einen Such- statt eines Scanvorgangs auswählt.The FORCESCAN hint can be useful for queries in which the optimizer underestimates the number of affected rows and chooses a seek operation rather than a scan operation. In diesem Fall ist der für den Vorgang bereitgestellte Arbeitsspeicher zu klein, was sich negativ auf die Abfrageleistung auswirkt.When this occurs, the amount of memory granted for the operation is too small and query performance is impacted.

FORCESCAN kann mit oder ohne INDEX-Hinweis angegeben werden.FORCESCAN can be specified with or without an INDEX hint. Bei Kombination mit einem Indexhinweis (INDEX = index_name, FORCESCAN) berücksichtigt der Abfrageoptimierer beim Zugriff auf die Tabelle, auf die verwiesen wird, nur Scanzugriffspfade über den angegebenen Index.When combined with an index hint, (INDEX = index_name, FORCESCAN), the query optimizer considers only scan access paths through the specified index when accessing the referenced table. FORCESCAN kann mit dem Indexhinweis INDEX(0) angegeben werden, um einen Tabellenscanvorgang für die Basistabelle zu erzwingen.FORCESCAN can be specified with the index hint INDEX(0) to force a table scan operation on the base table.

Bei partitionierten Tabellen und Indizes wird FORCESCAN angewendet, nachdem Partitionen durch Abfrageprädikatauswertung gelöscht wurden.For partitioned tables and indexes, FORCESCAN is applied after partitions have been eliminated through query predicate evaluation. Dies bedeutet, dass der Scan nur auf die verbleibenden Partitionen und nicht auf die gesamte Tabelle angewendet wird.This means that the scan is applied only to the remaining partitions and not to the entire table.

Der FORCESCAN-Hinweis unterliegt folgenden Einschränkungen:The FORCESCAN hint has the following restrictions:

  • Der Hinweis kann nicht für Tabellen angegeben werden, die Ziel einer INSERT-, UPDATE- oder DELETE-Anweisung sind.The hint cannot be specified for a table that is the target of an INSERT, UPDATE, or DELETE statement.
  • Der Hinweis kann nicht mit mehr als einem Indexhinweis verwendet werden.The hint cannot be used with more than one index hint.
  • Der Hinweis verhindert, dass der Optimierer räumliche oder XML-Indizes für die Tabelle berücksichtigt.The hint prevents the optimizer from considering any spatial or XML indexes on the table.
  • Der Hinweis kann nicht für eine Remotedatenquelle angegeben werden.The hint cannot be specified for a remote data source.
  • Der Hinweis kann nicht zusammen mit dem FORCESEEK-Hinweis angegeben werden.The hint cannot be specified in combination with the FORCESEEK hint.

HOLDLOCKHOLDLOCK
Entspricht der Option SERIALIZABLE.Is equivalent to SERIALIZABLE. Weitere Informationen finden Sie unter SERIALIZABLE weiter unten in diesem Thema.For more information, see SERIALIZABLE later in this topic. HOLDLOCK gilt nur für die Tabelle oder Sicht, für die sie angegeben wurde, und nur für die Dauer der Transaktion, die in der Anweisung definiert ist, in der auch HOLDLOCK verwendet wird.HOLDLOCK applies only to the table or view for which it is specified and only for the duration of the transaction defined by the statement that it is used in. HOLDLOCK kann in einer SELECT-Anweisung mit der Option FOR BROWSE nicht verwendet werden.HOLDLOCK cannot be used in a SELECT statement that includes the FOR BROWSE option.

IGNORE_CONSTRAINTSIGNORE_CONSTRAINTS
Gilt nur in einer INSERT-Anweisung, wenn die BULK-Option mit OPENROWSET verwendet wird.Is applicable only in an INSERT statement when the BULK option is used with OPENROWSET.

Gibt an, dass alle für die Tabelle geltenden Einschränkungen vom Massenimportvorgang ignoriert werden.Specifies that any constraints on the table are ignored by the bulk-import operation. Standardmäßig überprüft INSERT UNIQUE- und CHECK-Einschränkungen und Primärschlüssel- und Fremdschlüsseleinschränkungen.By default, INSERT checks Unique Constraints and Check Constraints and Primary and Foreign Key Constraints. Wenn für einen Massenimportvorgang IGNORE_CONSTRAINTS angegeben ist, müssen diese Einschränkungen für eine Zieltabelle von INSERT ignoriert werden.When IGNORE_CONSTRAINTS is specified for a bulk-import operation, INSERT must ignore these constraints on a target table. Beachten Sie, dass Sie die Einschränkungen UNIQUE, PRIMARY KEY oder NOT NULL nicht deaktivieren können.Note that you cannot disable UNIQUE, PRIMARY KEY, or NOT NULL constraints.

Sie sollten die Einschränkungen CHECK und FOREIGN KEY z. B. deaktivieren, wenn die Eingabedaten Zeilen enthalten, die Einschränkungen verletzen.You might want to disable CHECK and FOREIGN KEY constraints if the input data contains rows that violate constraints. Durch das Deaktivieren der Einschränkungen CHECK und FOREIGN KEY können Sie die Daten importieren und dann Transact-SQLTransact-SQL-Anweisungen zum Bereinigen (Cleanup) der Daten verwenden.By disabling the CHECK and FOREIGN KEY constraints, you can import the data and then use Transact-SQLTransact-SQL statements to clean up the data.

Wenn die CHECK-Einschränkung und die FOREIGN KEY-Einschränkung ignoriert werden, wird jede ignorierte Einschränkung der Tabelle nach dem Vorgang jedoch in der Katalogsicht sys.check_constraints oder sys.foreign_keys als is_not_trusted gekennzeichnet.However, when CHECK and FOREIGN KEY constraints are ignored, each ignored constraint on the table is marked as is_not_trusted in the sys.check_constraints or sys.foreign_keys catalog view after the operation. Irgendwann wird es sinnvoll sein, die Einschränkungen für die gesamte Tabelle zu überprüfen.At some point, you should check the constraints on the whole table. Wenn die Tabelle vor dem Massenimportvorgang nicht leer war, kann der Aufwand einer erneuten Überprüfung der Einschränkung höher sein als das Anwenden der Einschränkungen CHECK und FOREIGN KEY auf die inkrementellen Daten.If the table was not empty before the bulk import operation, the cost of revalidating the constraint may exceed the cost of applying CHECK and FOREIGN KEY constraints to the incremental data.

IGNORE_TRIGGERSIGNORE_TRIGGERS
Gilt nur in einer INSERT-Anweisung, wenn die BULK-Option mit OPENROWSET verwendet wird.Is applicable only in an INSERT statement when the BULK option is used with OPENROWSET.

Gibt an, dass alle für die Tabelle definierten Trigger vom Massenimportvorgang ignoriert werden.Specifies that any triggers defined on the table are ignored by the bulk-import operation. Standardmäßig werden Trigger von INSERT angewendet.By default, INSERT applies triggers.

Verwenden Sie IGNORE_TRIGGERS nur, wenn Ihre Anwendung von keinen Triggern abhängig ist und Leistungsmaximierung ein wichtiger Faktor ist.Use IGNORE_TRIGGERS only if your application does not depend on any triggers and maximizing performance is important.

NOLOCKNOLOCK
Entspricht der Option READUNCOMMITTED.Is equivalent to READUNCOMMITTED. Weitere Informationen finden Sie unter READUNCOMMITTED weiter unten in diesem Thema.For more information, see READUNCOMMITTED later in this topic.

Hinweis

Für UPDATE- oder DELETE-Anweisungen: Dieses Feature befindet sich im Wartungsmodus und wird möglicherweise in einer künftigen Version von Microsoft SQL Server entfernt.This feature is in maintenance mode and may be removed in a future version of Microsoft SQL Server. Nutzen Sie diese Funktionen bei Neuentwicklungen nicht mehr, und planen Sie die Änderung von Anwendungen, die diese Funktion zurzeit verwenden.Avoid using this feature in new development work, and plan to modify applications that currently use this feature.For UPDATE or DELETE statements: Dieses Feature befindet sich im Wartungsmodus und wird möglicherweise in einer künftigen Version von Microsoft SQL Server entfernt.This feature is in maintenance mode and may be removed in a future version of Microsoft SQL Server. Nutzen Sie diese Funktionen bei Neuentwicklungen nicht mehr, und planen Sie die Änderung von Anwendungen, die diese Funktion zurzeit verwenden.Avoid using this feature in new development work, and plan to modify applications that currently use this feature.

NOWAITNOWAIT
IWeist die Datenbank-EngineDatabase Engine an, eine Nachricht zurückzugeben, sobald eine Sperre für die Tabelle angetroffen wird.Instructs the Datenbank-EngineDatabase Engine to return a message as soon as a lock is encountered on the table. NOWAIT entspricht der Angabe von SET LOCK_TIMEOUT 0 für eine bestimmte Tabelle.NOWAIT is equivalent to specifying SET LOCK_TIMEOUT 0 for a specific table. Der NOWAIT-Hinweis funktioniert nicht, wenn der TABLOCK-Hinweis ebenfalls enthalten ist.The NOWAIT hint does not work when the TABLOCK hint is also included. Um eine Abfrage bei Verwendung des TABLOCK-Hinweises ohne Wartezeit zu beenden, stellen Sie der Abfrage stattdessen SETLOCK_TIMEOUT 0; voran.To terminate a query without waiting when using the TABLOCK hint, preface the query with SETLOCK_TIMEOUT 0; instead.

PAGLOCKPAGLOCK
Setzt Seitensperren entweder in solchen Fällen ein, in denen normalerweise einzelne Sperren für Zeilen oder Schlüssel gesetzt werden, oder in Fällen, in denen normalerweise eine einzelne Tabelle gesperrt wird.Takes page locks either where individual locks are ordinarily taken on rows or keys, or where a single table lock is ordinarily taken. Verwendet standardmäßig den für den Vorgang geeigneten Sperrmodus.By default, uses the lock mode appropriate for the operation. Wird das Argument in Transaktionen angegeben, die auf der SNAPSHOT-Isolationsstufe ausgeführt werden, werden Seitensperren nur dann verwendet, wenn PAGLOCK mit anderen Tabellenhinweisen kombiniert ist, die Sperren erfordern, wie beispielsweise UPDLOCK und HOLDLOCK.When specified in transactions operating at the SNAPSHOT isolation level, page locks are not taken unless PAGLOCK is combined with other table hints that require locks, such as UPDLOCK and HOLDLOCK.

READCOMMITTEDREADCOMMITTED
Gibt an, dass Lesevorgänge den Regeln für die Isolationsstufe READ COMMITTED entsprechen, indem entweder Sperren gesetzt werden oder die Zeilenversionsverwaltung verwendet wird.Specifies that read operations comply with the rules for the READ COMMITTED isolation level by using either locking or row versioning. Wenn die Datenbankoption READ_COMMITTED_SNAPSHOT auf OFF festgelegt wurde, fordert die Datenbank-EngineDatabase Engine beim Lesen der Daten freigegebene Sperren an und hebt diese Sperren nach Abschluss des Lesevorgangs wieder auf.If the database option READ_COMMITTED_SNAPSHOT is OFF, the Datenbank-EngineDatabase Engine acquires shared locks as data is read and releases those locks when the read operation is completed. Wenn die Datenbankoption READ_COMMITTED_SNAPSHOT auf ON festgelegt wurde, fordert die Datenbank-EngineDatabase Engine keine Sperren an und verwendet die Zeilenversionsverwaltung.If the database option READ_COMMITTED_SNAPSHOT is ON, the Datenbank-EngineDatabase Engine does not acquire locks and uses row versioning. Weitere Informationen zu Isolationsstufen in SQL Server finden Sie unter SET TRANSACTION ISOLATION LEVEL (Transact-SQL).For more information about isolation levels, see SET TRANSACTION ISOLATION LEVEL (Transact-SQL).

Hinweis

Für UPDATE- oder DELETE-Anweisungen: Dieses Feature befindet sich im Wartungsmodus und wird möglicherweise in einer künftigen Version von Microsoft SQL Server entfernt.This feature is in maintenance mode and may be removed in a future version of Microsoft SQL Server. Nutzen Sie diese Funktionen bei Neuentwicklungen nicht mehr, und planen Sie die Änderung von Anwendungen, die diese Funktion zurzeit verwenden.Avoid using this feature in new development work, and plan to modify applications that currently use this feature.For UPDATE or DELETE statements: Dieses Feature befindet sich im Wartungsmodus und wird möglicherweise in einer künftigen Version von Microsoft SQL Server entfernt.This feature is in maintenance mode and may be removed in a future version of Microsoft SQL Server. Nutzen Sie diese Funktionen bei Neuentwicklungen nicht mehr, und planen Sie die Änderung von Anwendungen, die diese Funktion zurzeit verwenden.Avoid using this feature in new development work, and plan to modify applications that currently use this feature.

READCOMMITTEDLOCKREADCOMMITTEDLOCK
Gibt an, dass Lesevorgänge den Regeln für die Isolationsstufe READ COMMITTED entsprechen, indem Sperren verwendet werden.Specifies that read operations comply with the rules for the READ COMMITTED isolation level by using locking. Die Datenbank-EngineDatabase Engine fordert beim Lesen der Daten freigegebene Sperren an und hebt diese Sperren nach Abschluss des Lesevorgangs wieder auf. Dabei spielt es keine Rolle, welche Einstellung für die Datenbankoption READ_COMMITTED_SNAPSHOT gewählt wurde.The Datenbank-EngineDatabase Engine acquires shared locks as data is read and releases those locks when the read operation is completed, regardless of the setting of the READ_COMMITTED_SNAPSHOT database option. Weitere Informationen zu Isolationsstufen in SQL Server finden Sie unter SET TRANSACTION ISOLATION LEVEL (Transact-SQL).For more information about isolation levels, see SET TRANSACTION ISOLATION LEVEL (Transact-SQL). Dieser Hinweis kann nicht für die Zieltabelle einer INSERT-Anweisung angegeben werden, in diesem Fall wird der Fehler 4140 zurückgegeben.This hint cannot be specified on the target table of an INSERT statement; error 4140 is returned.

READPASTREADPAST
Gibt an, dass Datenbank-EngineDatabase Engine keine Zeilen liest, die durch andere Transaktionen gesperrt wurden.Specifies that the Datenbank-EngineDatabase Engine not read rows that are locked by other transactions. Wenn READPAST angegeben ist, werden Sperren auf Zeilenebene übersprungen, Sperren auf Seitenebene allerdings nicht.When READPAST is specified, row-level locks are skipped but page-level locks are not skipped. Das bedeutet: anstatt die aktuelle Transaktion zu blockieren, überspringt das Datenbank-EngineDatabase Engine die Zeilen, bis die Sperren aufgehoben werden.That is, the Datenbank-EngineDatabase Engine skips past the rows instead of blocking the current transaction until the locks are released. Nehmen Sie z. B. an, die T1-Tabelle enthält eine Spalte mit einzelnen ganzen Zahlen und den Werten 1, 2, 3, 4, 5.For example, assume table T1 contains a single integer column with the values of 1, 2, 3, 4, 5. Wenn Transaktion A die Werte 3 bis 8 ändert, jedoch noch kein Commit für sie ausgeführt wurde, ergibt SELECT * FROM T1 (READPAST) die Werte 1, 2, 4, 5.If transaction A changes the value of 3 to 8 but has not yet committed, a SELECT * FROM T1 (READPAST) yields values 1, 2, 4, 5. READPAST dient hauptsächlich der Reduzierung von Sperrkonflikten beim Implementieren einer Arbeitswarteschlange, die eine SQL ServerSQL Server-Tabelle verwendet.READPAST is primarily used to reduce locking contention when implementing a work queue that uses a SQL ServerSQL Server table. Ein Warteschlangenlesevorgang, der READPAST verwendet, lässt durch andere Transaktionen gesperrte Warteschlangeneinträge aus und liest den nächsten verfügbaren Warteschlangeneintrag, ohne warten zu müssen, bis andere Transaktionen ihre Sperren aufheben.A queue reader that uses READPAST skips past queue entries locked by other transactions to the next available queue entry, without having to wait until the other transactions release their locks.

READPAST kann für jede Tabelle, auf die in einer UPDATE- oder DELETE-Anweisung verwiesen wird, und für jede Tabelle, auf die in einer FROM-Klausel verwiesen wird, angegeben werden.READPAST can be specified for any table referenced in an UPDATE or DELETE statement, and any table referenced in a FROM clause. Wenn Sie den READPAST-Sperrhinweis in einer UPDATE-Anweisung angeben, wird er nur angewendet, wenn Daten gelesen werden, um die Datensätze zu identifizieren, die aktualisiert werden müssen; dabei spielt es keine Rolle, wo in der Anweisung READPAST angegeben wird.When specified in an UPDATE statement, READPAST is applied only when reading data to identify which records to update, regardless of where in the statement it is specified. READPAST kann nicht für Tabellen in der INTO-Klausel einer INSERT-Anweisung angegeben werden.READPAST cannot be specified for tables in the INTO clause of an INSERT statement. Aktualisierungs- oder Löschoperationen, die READPAST verwenden, können beim Lesen von Fremdschlüsseln oder indizierten Sichten oder beim Ändern sekundärer Indizes zu Blockierungen führen.Update or delete operations that use READPAST may block when reading foreign keys or indexed views, or when modifying secondary indexes.

READPAST kann nur in Transaktionen angegeben werden, die mit den Isolationsstufen READ COMMITTED oder REPEATABLE READ arbeiten.READPAST can only be specified in transactions operating at the READ COMMITTED or REPEATABLE READ isolation levels. Wird das Argument in Transaktionen angegeben, die auf der SNAPSHOT-Isolationsstufe ausgeführt werden, muss READPAST mit anderen Tabellenhinweisen kombiniert werden, die Sperren erfordern, wie beispielsweise UPDLOCK und HOLDLOCK.When specified in transactions operating at the SNAPSHOT isolation level, READPAST must be combined with other table hints that require locks, such as UPDLOCK and HOLDLOCK.

Der READPAST-Tabellenhinweis kann nicht angegeben werden, wenn die READ_COMMITTED_SNAPSHOT-Datenbankoption auf ON festgelegt ist und eine der folgenden Bedingungen zutrifft:The READPAST table hint cannot be specified when the READ_COMMITTED_SNAPSHOT database option is set to ON and either of the following conditions is true:

  • Die Transaktionsisolationsstufe der Sitzung ist READ COMMITTED.The transaction isolation level of the session is READ COMMITTED.
  • Der READCOMMITTED-Tabellenhinweis wird ebenfalls in der Abfrage angegeben.The READCOMMITTED table hint is also specified in the query.

Um den READPAST-Hinweis in diesen Fällen anzugeben, entfernen Sie den READCOMMITTED-Tabellenhinweis (sofern vorhanden), und nehmen Sie den READCOMMITTEDLOCK-Tabellenhinweis in die Abfrage auf.To specify the READPAST hint in these cases, remove the READCOMMITTED table hint if present, and include the READCOMMITTEDLOCK table hint in the query.

READUNCOMMITTEDREADUNCOMMITTED
Gibt an, dass Dirty Reads zulässig sind.Specifies that dirty reads are allowed. Es werden keine freigegebenen Sperren angefordert, um andere Transaktionen daran zu hindern, von der aktuellen Transaktion gelesene Daten zu ändern, und exklusive Sperren, die von anderen Transaktionen verwendet wurden, hindern die aktuelle Transaktion nicht daran, die gesperrten Daten zu lesen.No shared locks are issued to prevent other transactions from modifying data read by the current transaction, and exclusive locks set by other transactions do not block the current transaction from reading the locked data. Das kann eine höhere Parallelität, aber gleichzeitig zur Folge haben, dass Datenänderungen gelesen werden, für die andere Transaktionen dann ein Rollback ausführen.Allowing dirty reads can cause higher concurrency, but at the cost of reading data modifications that then are rolled back by other transactions. Dadurch können Fehler in der Transaktion auftreten, Daten angezeigt werden, für die nie ein Commit ausgeführt wurde, oder Datensätze zwei Mal (oder gar nicht) dargestellt werden.This may generate errors for your transaction, present users with data that was never committed, or cause users to see records twice (or not at all).

READUNCOMMITTED- und NOLOCK-Hinweise gelten nur für Datensperren.READUNCOMMITTED and NOLOCK hints apply only to data locks. Alle Abfragen, auch solche mit READUNCOMMITTED- und NOLOCK-Hinweisen, aktivieren bei der Kompilierung und Ausführung Sperren des Typs Sch-S (Schemastabilität).All queries, including those with READUNCOMMITTED and NOLOCK hints, acquire Sch-S (schema stability) locks during compilation and execution. Daher werden Abfragen gesperrt, wenn eine gleichzeitige Transaktion eine Schemaänderungssperre (Sch-M) für die Tabelle aufrechterhält.Because of this, queries are blocked when a concurrent transaction holds a Sch-M (schema modification) lock on the table. Beispielsweise aktiviert ein DDL-Vorgang (Data Definition Language, Datendefinitionssprache) eine Sch-S-Sperre, bevor die Schemainformationen für die Tabelle geändert werden.For example, a data definition language (DDL) operation acquires a Sch-M lock before it modifies the schema information of the table. Alle gleichzeitigen Abfragen, auch solche mit READUNCOMMITTED- oder NOLOCK-Hinweisen, werden beim Versuch, eine Sch-S-Sperre zu errichten, gesperrt.Any concurrent queries, including those running with READUNCOMMITTED or NOLOCK hints, are blocked when attempting to acquire a Sch-S lock. Umgekehrt blockiert eine Abfrage, die eine Sch-S-Sperre aufrechterhält, eine gleichzeitige Transaktion, die versucht, eine Sch-M-Sperre zu errichten.Conversely, a query holding a Sch-S lock blocks a concurrent transaction that attempts to acquire a Sch-M lock.

READUNCOMMITTED und NOLOCK können nicht für Tabellen angegeben werden, die durch Einfüge-, Update- oder Löschvorgänge geändert wurden.READUNCOMMITTED and NOLOCK cannot be specified for tables modified by insert, update, or delete operations. Der SQL ServerSQL Server-Abfrageoptimierer ignoriert die READUNCOMMITTED- und NOLOCK-Hinweise in der FROM-Klausel, die für die Zieltabelle einer UPDATE- oder DELETE-Anweisung gelten.The SQL ServerSQL Server query optimizer ignores the READUNCOMMITTED and NOLOCK hints in the FROM clause that apply to the target table of an UPDATE or DELETE statement.

Hinweis

Die Unterstützung für die Verwendung der READUNCOMMITTED- und NOLOCK-Hinweise in der FROM-Klausel, die sich auf die Zieltabelle einer UPDATE- oder DELETE-Anweisung beziehen, wird in einer zukünftigen Version von SQL ServerSQL Server entfernt.Support for use of the READUNCOMMITTED and NOLOCK hints in the FROM clause that apply to the target table of an UPDATE or DELETE statement will be removed in a future version of SQL ServerSQL Server. Vermeiden Sie die Verwendung dieser Hinweise in diesem Kontext beim Entwickeln neuer Anwendungen, und planen Sie die Änderung von Anwendungen, in denen sie aktuell verwendet werden.Avoid using these hints in this context in new development work, and plan to modify applications that currently use them.

Sie können Konflikte zwischen Sperren minimieren und zugleich Transaktionen vor Dirty Reads von Datenänderungen, für die kein Commit ausgeführt wurde, auf eine der folgenden Weisen schützen:You can minimize locking contention while protecting transactions from dirty reads of uncommitted data modifications by using either of the following:

  • Verwendung der READ COMMITTED-Isolationsstufe bei Festlegen der Datenbankoption READ_COMMITTED_SNAPSHOT auf ON.The READ COMMITTED isolation level with the READ_COMMITTED_SNAPSHOT database option set ON.
  • Verwendung der SNAPSHOT-Isolationsstufe.The SNAPSHOT isolation level.

Weitere Informationen zu Isolationsstufen in SQL Server finden Sie unter SET TRANSACTION ISOLATION LEVEL (Transact-SQL).For more information about isolation levels, see SET TRANSACTION ISOLATION LEVEL (Transact-SQL).

Hinweis

Haben Sie READUNCOMMITTED angegeben und erhalten die Fehlermeldung 601, lösen Sie den Fehler auf wie einen Deadlockfehler (1205), und wiederholen Sie die Anweisung.If you receive the error message 601 when READUNCOMMITTED is specified, resolve it as you would a deadlock error (1205), and retry your statement.

REPEATABLEREADREPEATABLEREAD
Legt fest, dass ein Scan mit derselben Sperrsemantik wie eine Transaktion durchgeführt wird, die auf der Isolationsstufe REPEATABLE READ ausgeführt wird.Specifies that a scan is performed with the same locking semantics as a transaction running at REPEATABLE READ isolation level. Weitere Informationen zu Isolationsstufen in SQL Server finden Sie unter SET TRANSACTION ISOLATION LEVEL (Transact-SQL).For more information about isolation levels, see SET TRANSACTION ISOLATION LEVEL (Transact-SQL).

ROWLOCKROWLOCK
Gibt an, das Zeilensperren in solchen Fällen gesetzt werden, in denen normalerweise Seiten- oder Tabellensperren gesetzt werden.Specifies that row locks are taken when page or table locks are ordinarily taken. Wird das Argument in Transaktionen angegeben, die auf der SNAPSHOT-Isolationsstufe ausgeführt werden, werden Zeilensperren nur dann verwendet, wenn ROWLOCK mit anderen Tabellenhinweisen kombiniert ist, die Sperren erfordern, wie beispielsweise UPDLOCK und HOLDLOCK.When specified in transactions operating at the SNAPSHOT isolation level, row locks are not taken unless ROWLOCK is combined with other table hints that require locks, such as UPDLOCK and HOLDLOCK.

SERIALIZABLESERIALIZABLE
Entspricht der Option HOLDLOCK.Is equivalent to HOLDLOCK. Verstärkt die Einschränkung von freigegebenen Sperren, indem sie aufrechterhalten werden, bis eine Transaktion abgeschlossen ist (anstatt die freigegebene Sperre aufzuheben, sobald die benötigte Tabelle oder Datenseite nicht mehr gebraucht wird, ganz gleich, ob die Transaktion abgeschlossen ist oder nicht).Makes shared locks more restrictive by holding them until a transaction is completed, instead of releasing the shared lock as soon as the required table or data page is no longer needed, whether the transaction has been completed or not. Der Scan wird mit derselben Sperrsemantik wie eine Transaktion durchgeführt, die auf der Isolationsstufe SERIALIZABLE ausgeführt wird.The scan is performed with the same semantics as a transaction running at the SERIALIZABLE isolation level. Weitere Informationen zu Isolationsstufen in SQL Server finden Sie unter SET TRANSACTION ISOLATION LEVEL (Transact-SQL).For more information about isolation levels, see SET TRANSACTION ISOLATION LEVEL (Transact-SQL).

SNAPSHOTSNAPSHOT
Gilt für: SQL Server 2014 (12.x)SQL Server 2014 (12.x) und höher.Applies to: SQL Server 2014 (12.x)SQL Server 2014 (12.x) and later.

Auf die speicheroptimierte Tabelle wird unter der SNAPSHOT-Isolation zugegriffen.The memory-optimized table is accessed under SNAPSHOT isolation. SNAPSHOT kann nur mit speicheroptimierten Tabellen verwendet werden (nicht mit datenträgerbasierten Tabellen).SNAPSHOT can only be used with memory-optimized tables (not with disk-based tables). Weitere Informationen finden Sie unter Einführung in speicheroptimierte Tabellen.For more information, see Introduction to Memory-Optimized Tables.

SELECT * FROM dbo.Customers AS c   
WITH (SNAPSHOT)   
LEFT JOIN dbo.[Order History] AS oh   
    ON c.customer_id=oh.customer_id;  

SPATIAL_WINDOW_MAX_CELLS = integerSPATIAL_WINDOW_MAX_CELLS = integer
Gilt für: SQL Server 2012 (11.x)SQL Server 2012 (11.x) und höher.Applies to: SQL Server 2012 (11.x)SQL Server 2012 (11.x) and later.
Gibt die maximale Anzahl der Zellen an, die für die Mosaikbearbeitung eines geometry- oder geography-Objekts verwendet werden sollen.Specifies the maximum number of cells to use for tessellating a geometry or geography object. number muss einen Wert zwischen 1 und 8192 aufweisen.number is a value between 1 and 8192.

Mit dieser Option können Sie die Ausführungszeit von Abfragen optimieren, indem Sie den Zusammenhang zwischen der Ausführungszeit des primären und des sekundären Filters kontrollieren.This option allows for fine-tuning of query execution time by adjusting the tradeoff between primary and secondary filter execution time. Ein höherer Wert verringert die Ausführungszeit des sekundären Filters, erhöht jedoch die Ausführungszeit des primären Filters. Ein niedrigerer Wert verringert die Ausführungszeit des primären Filters, erhöht jedoch die Ausführungszeit des sekundären Filters.A larger number reduces secondary filter execution time, but increases primary execution filter time and a smaller number decreases primary filter execution time, but increase secondary filter execution. Bei räumlichen Daten mit größerer Dichte sollte ein höherer Wert durch bessere Angleichung an den primären Filter und Verringerung der Ausführungszeit des sekundären Filters in einer niedrigeren Ausführungszeit resultieren.For denser spatial data, a higher number should produce a faster execution time by giving a better approximation with the primary filter and reducing secondary filter execution time. Bei Daten mit geringer Dichte verringert ein niedrigerer Wert die Ausführungszeit des primären Filters.For sparser data, a lower number will decrease the primary filter execution time.

Diese Option funktioniert für sowohl manuelle als auch automatische Rastermosaike.This option works for both manual and automatic grid tessellations.

TABLOCKTABLOCK
Gibt an, dass die abgerufene Sperre auf Tabellenebene aktiviert wird.Specifies that the acquired lock is applied at the table level. Der Typ der abgerufenen Sperre hängt von der ausgeführten Anweisung ab.The type of lock that is acquired depends on the statement being executed. Beispielsweise kann eine SELECT-Anweisung eine gemeinsame Sperre abrufen.For example, a SELECT statement may acquire a shared lock. Bei Angabe von TABLOCK wird die gemeinsame Sperre auf die gesamte Tabelle statt auf Zeilen- oder Seitenebene angewendet.By specifying TABLOCK, the shared lock is applied to the entire table instead of at the row or page level. Wird zusätzlich HOLDLOCK angegeben, wird die Tabellensperre bis zum Transaktionsende aufrechterhalten.If HOLDLOCK is also specified, the table lock is held until the end of the transaction.

Wenn Sie Daten mit der INSERT INTO <target_table> SELECT <columns> FROM <source_table>-Anweisung in einen Heap importieren, können Sie optimierte Protokollierung und Sperrung für die Anweisung aktivieren, indem Sie den TABLOCK-Hinweis für die Zieltabelle angeben.When importing data into a heap by using the INSERT INTO <target_table> SELECT <columns> FROM <source_table> statement, you can enable optimized logging and locking for the statement by specifying the TABLOCK hint for the target table. Außerdem muss das Wiederherstellungsmodell der Datenbank auf einfach oder massenprotokolliert festgelegt werden.In addition, the recovery model of the database must be set to simple or bulk-logged. Weitere Informationen finden Sie unter INSERT (Transact-SQL).For more information, see INSERT (Transact-SQL).

Wenn der TABLOCK-Hinweis mit dem OPENROWSET-Massenrowsetanbieter verwendet wird, um Daten in eine Tabelle zu importieren, ermöglicht er mehreren Clients das gleichzeitige Laden von Daten in die Zieltabelle mit optimierter Protokollierung und Sperrung.When used with the OPENROWSET bulk rowset provider to import data into a table, TABLOCK enables multiple clients to concurrently load data into the target table with optimized logging and locking. Weitere Informationen finden Sie unter Voraussetzungen für die minimale Protokollierung beim Massenimport.For more information, see Prerequisites for Minimal Logging in Bulk Import.

TABLOCKXTABLOCKX
Gibt an, dass für die Tabelle eine exklusive Sperre verwendet wird.Specifies that an exclusive lock is taken on the table.

UPDLOCKUPDLOCK
Gibt an, dass Updatesperren zu verwenden und aufrechtzuerhalten sind, bis die Transaktion abgeschlossen ist.Specifies that update locks are to be taken and held until the transaction completes. UPDLOCK erstellt Updatesperren für Lesevorgänge nur auf Zeilen- oder Seitenebene.UPDLOCK takes update locks for read operations only at the row-level or page-level. Wenn UPDLOCK mit TABLOCK kombiniert wird oder aus einem anderen Grund eine Sperre auf Tabellenebene erstellt wird, wird stattdessen eine exklusive Sperre (X) erstellt.If UPDLOCK is combined with TABLOCK, or a table-level lock is taken for some other reason, an exclusive (X) lock will be taken instead.

Bei Angabe von UPDLOCK werden die Isolationsstufenhinweise READCOMMITTED und READCOMMITTEDLOCK ignoriert.When UPDLOCK is specified, the READCOMMITTED and READCOMMITTEDLOCK isolation level hints are ignored. Wenn beispielsweise die Isolationsstufe der Sitzung auf SERIALIZABLE festgelegt ist und eine Abfrage (UPDLOCK, READCOMMITTED) angibt, wird der READCOMMITTED-Hinweis ignoriert, und die Transaktion wird mit der Isolationsstufe SERIALIZABLE ausgeführt.For example, if the isolation level of the session is set to SERIALIZABLE and a query specifies (UPDLOCK, READCOMMITTED), the READCOMMITTED hint is ignored and the transaction is run using the SERIALIZABLE isolation level.

XLOCKXLOCK
Gibt an, dass exklusive Sperren zu verwenden und aufrechtzuerhalten sind, bis die Transaktion abgeschlossen ist.Specifies that exclusive locks are to be taken and held until the transaction completes. Wenn die exklusiven Sperren mit ROWLOCK, PAGLOCK oder TABLOCK angegeben werden, werden sie auf die entsprechende Ebene der Granularität angewendet.If specified with ROWLOCK, PAGLOCK, or TABLOCK, the exclusive locks apply to the appropriate level of granularity.

RemarksRemarks

Tabellenhinweise werden ignoriert, wenn der Abfrageplan nicht auf die Tabelle zugreift.The table hints are ignored if the table is not accessed by the query plan. Dies ist möglicherweise darauf zurückzuführen, dass der Optimierer überhaupt nicht auf die Tabelle oder stattdessen auf eine indizierte Sicht zugreift.This may be caused by the optimizer choosing not to access the table at all, or because an indexed view is accessed instead. In letzterem Fall kann der Zugriff auf eine indizierte Sicht verhindert werden, indem der Abfragehinweis OPTION (EXPAND VIEWS) verwendet wird.In the latter case, accessing an indexed view can be prevented by using the OPTION (EXPAND VIEWS) query hint.

Alle Sperrhinweise werden an alle Tabellen und Sichten weitergeleitet, auf die der Abfrageplan zugreift, auch an Tabellen und Sichten, auf die in einer Sicht verwiesen wird.All lock hints are propagated to all the tables and views that are accessed by the query plan, including tables and views referenced in a view. Zusätzlich nimmt SQL ServerSQL Server die entsprechenden Sperrkonsistenzprüfungen vor.Also, SQL ServerSQL Server performs the corresponding lock consistency checks.

Die Sperrhinweise ROWLOCK, UPDLOCK und XLOCK, die Sperren auf der Zeilenebene anfordern, platzieren Sperren ggf. auf Indexschlüsseln und nicht auf den eigentlichen Datenzeilen.Lock hints ROWLOCK, UPDLOCK, AND XLOCK that acquire row-level locks may place locks on index keys rather than the actual data rows. Wenn eine Tabelle beispielsweise über einen nicht gruppierten Index verfügt und eine SELECT-Anweisung, die einen Sperrhinweis verwendet, von einem abdeckenden Index verarbeitet wird, wird eine Sperre für den Indexschlüssel im abdeckenden Index angefordert, statt für die Datenzeile in der Basistabelle.For example, if a table has a nonclustered index, and a SELECT statement using a lock hint is handled by a covering index, a lock is acquired on the index key in the covering index rather than on the data row in the base table.

Falls eine Tabelle berechnete Spalten enthält und die berechneten Spalten von Ausdrücken oder Funktionen berechnet werden, die auf Spalten anderer Tabellen zugreifen, werden auf diese Tabellen keine Tabellenhinweise angewendet und es erfolgt keine Weitergabe.If a table contains computed columns that are computed by expressions or functions accessing columns in other tables, the table hints are not used on those tables and are not propagated. Angenommen, für eine Tabelle in der Abfrage wird der NOLOCK-Tabellenhinweis angegeben.For example, a NOLOCK table hint is specified on a table in the query. Diese Tabelle enthält berechnete Spalten, die von einer Kombination aus Ausdrücken und Funktionen berechnet werden, die auf Spalten in einer anderen Tabelle zugreifen.This table has computed columns that are computed by a combination of expressions and functions that access columns in another table. Die Tabellen, auf die die Ausdrücke und Funktionen verweisen, verwenden den Tabellenhinweis NOLOCK nicht, wenn auf sie zugegriffen wird.The tables referenced by the expressions and functions do not use the NOLOCK table hint when accessed.

SQL ServerSQL Server gestattet für jede Tabelle in der FROM-Klausel maximal einen Tabellenhinweis aus jeder der folgenden Gruppen:does not allow for more than one table hint from each of the following groups for each table in the FROM clause:

  • Granularitätshinweise: PAGLOCK, NOLOCK, READCOMMITTEDLOCK, ROWLOCK, TABLOCK oder TABLOCKX.Granularity hints: PAGLOCK, NOLOCK, READCOMMITTEDLOCK, ROWLOCK, TABLOCK, or TABLOCKX.
  • Isolationsstufenhinweise: HOLDLOCK, NOLOCK, READCOMMITTED, REPEATABLEREAD, SERIALIZABLE.Isolation level hints: HOLDLOCK, NOLOCK, READCOMMITTED, REPEATABLEREAD, SERIALIZABLE.

Gefilterte IndexhinweiseFiltered Index Hints

Ein gefilterter Index kann als Tabellenhinweis verwendet werden, bewirkt jedoch, dass der Abfrageoptimierer den Fehler 8622 generiert, wenn er nicht alle Zeilen abdeckt, die durch die Abfrage ausgewählt werden.A filtered index can be used as a table hint, but will cause the query optimizer to generate error 8622 if it does not cover all of the rows that the query selects. Es folgt ein Beispiel für einen ungültigen gefilterten Indexhinweis.The following is an example of an invalid filtered index hint. Im folgenden Beispiel wird der gefilterte Index FIBillOfMaterialsWithComponentID erstellt und anschließend als Indexhinweis für eine SELECT-Anweisung verwendet.The example creates the filtered index FIBillOfMaterialsWithComponentID and then uses it as an index hint for a SELECT statement. Das gefilterte Indexprädikat schließt Datenzeilen für die ComponentIDs 533, 324 und 753 ein.The filtered index predicate includes data rows for ComponentIDs 533, 324, and 753. Das Abfrageprädikat schließt ebenfalls Datenzeilen für die ComponentIDs 533, 324 und 753 ein, erweitert das Resultset jedoch um die ComponentIDs 855 und 924, die nicht im gefilterten Index enthalten sind.The query predicate also includes data rows for ComponentIDs 533, 324, and 753 but extends the result set to include ComponentIDs 855 and 924, which are not in the filtered index. Deshalb kann der Abfrageoptimierer den gefilterten Indexhinweis nicht verwenden und generiert den Fehler 8622.Therefore, the query optimizer cannot use the filtered index hint and generates error 8622. Weitere Informationen finden Sie unter erstellen gefilterter Indizes.For more information, see Create Filtered Indexes.

IF EXISTS (SELECT name FROM sys.indexes  
    WHERE name = N'FIBillOfMaterialsWithComponentID'   
    AND object_id = OBJECT_ID(N'Production.BillOfMaterials'))  
DROP INDEX FIBillOfMaterialsWithComponentID  
    ON Production.BillOfMaterials;  
GO  
CREATE NONCLUSTERED INDEX "FIBillOfMaterialsWithComponentID"  
    ON Production.BillOfMaterials (ComponentID, StartDate, EndDate)  
    WHERE ComponentID IN (533, 324, 753);  
GO  
SELECT StartDate, ComponentID FROM Production.BillOfMaterials  
    WITH( INDEX (FIBillOfMaterialsWithComponentID) )  
    WHERE ComponentID in (533, 324, 753, 855, 924);  
GO  

Der Abfrageoptimierer berücksichtigt einen Indexhinweis nicht, wenn die SET-Optionen nicht die erforderlichen Werte für die gefilterten Indizes enthalten.The query optimizer will not consider an index hint if the SET options do not have the required values for filtered indexes. Weitere Informationen finden Sie unter CREATE INDEX (Transact-SQL).For more information, see CREATE INDEX (Transact-SQL).

Verwenden von NOEXPANDUsing NOEXPAND

NOEXPAND gilt nur für indizierte Sichten.NOEXPAND applies only to indexed views. Eine indizierte Sicht ist eine Sicht, auf der ein eindeutiger gruppierter Index erstellt wurde.An indexed view is a view with a unique clustered index created on it. Wenn eine Abfrage Verweise auf Spalten enthält, die in einer indizierten Sicht und in Basistabellen vorhanden sind, und der Abfrageoptimierer festlegt, dass die Verwendung der indizierten Sicht die beste Methode zum Ausführen der Abfrage darstellt, verwendet der Optimierer den Index der Sicht.If a query contains references to columns that are present both in an indexed view and base tables, and the query optimizer determines that using the indexed view provides the best method for executing the query, the query optimizer uses the index on the view. Diese Funktionalität wird als Abgleich der indizierten Sicht bezeichnet.This functionality is called indexed view matching. Vor SQL Server 2016 (13.x)SQL Server 2016 (13.x) SP1 wurde die automatische Verwendung einer indizierten Sicht durch den Abfrageoptimierer nur in bestimmten Editionen von SQL ServerSQL Server unterstützt.Prior to SQL Server 2016 (13.x)SQL Server 2016 (13.x) SP1, automatic use of an indexed view by the query optimizer is supported only in specific editions of SQL ServerSQL Server. Eine Liste der Funktionen, die von den SQL ServerSQL Server-Editionen unterstützt werden, finden Sie unter Von den SQL Server 2016-Editionen unterstützte Funktionen.For a list of features that are supported by the editions of SQL ServerSQL Server, see Features Supported by the Editions of SQL Server 2016.

Damit der Optimierer indizierte Sichten für den Abgleich oder die Verwendung einer indizierten Sicht berücksichtigt, auf die mit dem NOEXPAND-Hinweis verwiesen wird, müssen die folgenden SET-Optionen auf ON festgelegt werden.However, for the optimizer to consider indexed views for matching, or use an indexed view that is referenced with the NOEXPAND hint, the following SET options must be set to ON.

Hinweis

Azure SQL-DatenbankAzure SQL Database unterstützt die automatische Verwendung indizierter Sichten ohne Angabe des NOEXPAND-Hinweises.supports automatic use of indexed views without specifying the NOEXPAND hint.

ANSI_NULLSANSI_NULLS ANSI_WARNINGSANSI_WARNINGS CONCAT_NULL_YIELDS_NULLCONCAT_NULL_YIELDS_NULL
ANSI_PADDINGANSI_PADDING ARITHABORT1ARITHABORT1 QUOTED_IDENTIFIERQUOTED_IDENTIFIER

1 ARITHABORT wird implizit auf ON festgelegt, wenn ANSI_WARNINGS auf ON festgelegt wurde.1 ARITHABORT is implicitly set to ON when ANSI_WARNINGS is set to ON. Es ist daher nicht erforderlich, diese Einstellung manuell anzupassen.Therefore, you do not have to manually adjust this setting.

Auch muss die Option NUMERIC_ROUNDABORT auf OFF festgelegt sein.Also, the NUMERIC_ROUNDABORT option must be set to OFF.

Damit der Optimierer einen Index für eine indizierte Sicht verwendet, geben Sie die Option NOEXPAND an.To force the optimizer to use an index for an indexed view, specify the NOEXPAND option. Dieser Hinweis kann nur dann verwendet werden, wenn die Sicht ebenfalls in der Abfrage angegeben wurde.This hint can be used only if the view is also named in the query. SQL ServerSQL Server stellt keinen Hinweis zur Verfügung, um die Verwendung einer bestimmten indizierten Sicht in einer Abfrage, die die Sicht nicht direkt in der FROM-Klausel benennt, zu erzwingen. Der Abfrageoptimierer zieht jedoch die Verwendung indizierter Sichten in Erwägung, selbst wenn in der Abfrage nicht direkt auf sie verwiesen wird.does not provide a hint to force a particular indexed view to be used in a query that does not name the view directly in the FROM clause; however, the query optimizer considers using indexed views, even if they are not referenced directly in the query. SQL Server erstellt Statistiken in einer indizierten Sicht nur automatisch, wenn ein NOEXPAND-Tabellenhinweis verwendet wird.SQL Server will only automatically create statistics on an indexed view when a NOEXPAND table hint is used. Wenn Sie diesen Hinweis auslassen, können beim Ausführungsplan Warnungen zu fehlenden Statistiken auftreten, die nicht durch manuelles Erstellen von Statistiken aufgelöst werden können.Omitting this hint can lead to execution plan warnings about missing statistics that cannot be resolved by creating statistics manually. Während der Abfrageoptimierung nutzt SQL ServerSQL Server Ansichtsstatistiken, die automatisch oder manuell erstellt werden, wenn die Abfrage direkt auf die Ansicht verweist und der NOEXPAND-Hinweis verwendet wird.During query optimization SQL ServerSQL Server will use view statistics that were created automatically or manually when the query references the view directly and the NOEXPAND hint is used.

Verwenden eines Tabellenhinweises als AbfragehinweisUsing a Table Hint as a Query Hint

Tabellenhinweise können mit der OPTION (TABLE HINT)-Klausel auch als Abfragehinweis angegeben werden.Table hints can also be specified as a query hint by using the OPTION (TABLE HINT) clause. Es wird empfohlen, einen Tabellenhinweis nur im Kontext einer Planhinweisliste als Abfragehinweis zu verwenden.We recommend using a table hint as a query hint only in the context of a plan guide. Für Ad-hoc-Abfragen geben Sie diese Hinweise nur als Tabellenhinweise an.For ad-hoc queries, specify these hints only as table hints. Weitere Informationen finden Sie unter Abfragehinweise (Transact-SQL).For more information, see Query Hints (Transact-SQL).

BerechtigungenPermissions

Für die KEEPIDENTITY, IGNORE_CONSTRAINTS- und IGNORE_TRIGGERS-Hinweise werden ALTER-Berechtigungen für die Tabelle benötigt.The KEEPIDENTITY, IGNORE_CONSTRAINTS, and IGNORE_TRIGGERS hints require ALTER permissions on the table.

BeispieleExamples

A.A. Verwenden des TABLOCK-Hinweises zum Angeben einer SperrmethodeUsing the TABLOCK hint to specify a locking method

Im folgenden Beispiel wird angegeben, dass eine freigegebene Sperre für die Production.Product-Tabelle in der AdventureWorks2012AdventureWorks2012-Datenbank eingerichtet und bis zum Ende der UPDATE-Anweisung aufrechterhalten wird.The following example specifies that a shared lock is taken on the Production.Product table in the AdventureWorks2012AdventureWorks2012 database and is held until the end of the UPDATE statement.

UPDATE Production.Product  
WITH (TABLOCK)  
SET ListPrice = ListPrice * 1.10  
WHERE ProductNumber LIKE 'BK-%';  
GO  

B.B. Verwenden des FORCESEEK-Hinweises zum Angeben eines IndexsuchvorgangsUsing the FORCESEEK hint to specify an index seek operation

Im folgenden Beispiel wird der Abfrageoptimierer mithilfe des FORCESEEK-Tipps ohne Indexangabe gezwungen, einen Indexsuchvorgang in der Sales.SalesOrderDetail-Tabelle in der AdventureWorks2012AdventureWorks2012-Datenbank durchzuführen.The following example uses the FORCESEEK hint without specifying an index to force the query optimizer to perform an index seek operation on the Sales.SalesOrderDetail table in the AdventureWorks2012AdventureWorks2012 database.

SELECT *  
FROM Sales.SalesOrderHeader AS h  
INNER JOIN Sales.SalesOrderDetail AS d WITH (FORCESEEK)  
    ON h.SalesOrderID = d.SalesOrderID   
WHERE h.TotalDue > 100  
AND (d.OrderQty > 5 OR d.LineTotal < 1000.00);  
GO  
  

Im folgenden Beispiel wird der Abfrageoptimierer mithilfe des FORCESEEK-Hinweises mit Index gezwungen, einen Indexsuchvorgang im angegebenen Index und in der angegebenen Indexspalte durchzuführen.The following example uses the FORCESEEK hint with an index to force the query optimizer to perform an index seek operation on the specified index and index column.

SELECT h.SalesOrderID, h.TotalDue, d.OrderQty  
FROM Sales.SalesOrderHeader AS h  
    INNER JOIN Sales.SalesOrderDetail AS d   
    WITH (FORCESEEK (PK_SalesOrderDetail_SalesOrderID_SalesOrderDetailID (SalesOrderID)))   
    ON h.SalesOrderID = d.SalesOrderID   
WHERE h.TotalDue > 100  
AND (d.OrderQty > 5 OR d.LineTotal < 1000.00);   
GO  
  

C.C. Verwenden des FORCESCAN-Hinweises zum Angeben eines IndexscanvorgangsUsing the FORCESCAN hint to specify an index scan operation

Im folgenden Beispiel wird der Abfrageoptimierer mithilfe eines FORCESCAN-Tipps gezwungen, einen Scanvorgang in der Sales.SalesOrderDetail-Tabelle in der AdventureWorks2012AdventureWorks2012-Datenbank durchzuführen.The following example uses the FORCESCAN hint to force the query optimizer to perform a scan operation on the Sales.SalesOrderDetail table in the AdventureWorks2012AdventureWorks2012 database.

SELECT h.SalesOrderID, h.TotalDue, d.OrderQty  
FROM Sales.SalesOrderHeader AS h  
    INNER JOIN Sales.SalesOrderDetail AS d   
    WITH (FORCESCAN)   
    ON h.SalesOrderID = d.SalesOrderID   
WHERE h.TotalDue > 100  
AND (d.OrderQty > 5 OR d.LineTotal < 1000.00);  

Weitere InformationenSee Also

OPENROWSET (Transact-SQL) OPENROWSET (Transact-SQL)
Hints (Transact-SQL) Hints (Transact-SQL)
Abfragehinweise (Transact-SQL)Query Hints (Transact-SQL)