CONTAINS (Transact-SQL)CONTAINS (Transact-SQL)

GILT FÜR: jaSQL Server (ab 2008) jaAzure SQL-DatenbankjaAzure SQL Data Warehouse neinParallel Data WarehouseAPPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Sucht nach genauen oder ungenauen (Fuzzy-)Übereinstimmungen mit einzelnen Wörtern und Satzteilen, für innerhalb einer bestimmten Entfernung angrenzende Wörter sowie für gewichtete Übereinstimmungen in SQL ServerSQL Server.Searches for precise or fuzzy (less precise) matches to single words and phrases, words within a certain distance of one another, or weighted matches in SQL ServerSQL Server. CONTAINS ist ein Prädikat, das in der WHERE-Klausel einer Transact-SQLTransact-SQL-SELECT-Anweisung verwendet wird, um SQL ServerSQL Server-Volltextsuchvorgänge für volltextindizierte Spalten mit zeichenbasierten Datentypen durchzuführen.CONTAINS is a predicate used in the WHERE clause of a Transact-SQLTransact-SQL SELECT statement to perform SQL ServerSQL Server full-text search on full-text indexed columns containing character-based data types.

Folgendes kann mit CONTAINS gesucht werden:CONTAINS can search for:

  • Ein Wort oder ein Ausdruck.A word or phrase.

  • Das Präfix eines Worts oder eines Ausdrucks.The prefix of a word or phrase.

  • Ein Wort, das einem anderen Wort ähnlich ist.A word near another word.

  • Ein Wort, das mithilfe von Beugung aus einem anderen generiert wurde (z. B. stellt das Wort drive den Beugungsstamm von drives, drove, driving und driven dar.)A word inflectionally generated from another (for example, the word drive is the inflectional stem of drives, drove, driving, and driven).

  • Ein Wort, das ein Synonym für ein anderes Wort ist (das Wort Metall kann z. B. über die Synonyme Aluminium und Stahl verfügen). Dazu wird ein Thesaurus verwendet.A word that is a synonym of another word using a thesaurus (for example, the word "metal" can have synonyms such as "aluminum" and "steel").

Informationen zu den Formen der Volltextsuche, die von SQL ServerSQL Server unterstützt werden, finden Sie unter Abfragen mit Volltextsuche.For information about the forms of full-text searches that are supported by SQL ServerSQL Server, see Query with Full-Text Search.

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

SyntaxSyntax

CONTAINS (   
     {   
        column_name | ( column_list )   
      | *   
      | PROPERTY ( { column_name }, 'property_name' )    
     }   
     , '<contains_search_condition>'  
     [ , LANGUAGE language_term ]  
   )   
  
<contains_search_condition> ::=   
  {   
      <simple_term>   
    | <prefix_term>   
    | <generation_term>   
    | <generic_proximity_term>   
    | <custom_proximity_term>   
    | <weighted_term>   
    }   
  |   
    { ( <contains_search_condition> )   
        [ { <AND> | <AND NOT> | <OR> } ]   
        <contains_search_condition> [ ...n ]   
  }   
<simple_term> ::=   
     { word | "phrase" }  
  
<prefix term> ::=   
  { "word*" | "phrase*" }  
  
<generation_term> ::=   
  FORMSOF ( { INFLECTIONAL | THESAURUS } , <simple_term> [ ,...n ] )   
  
<generic_proximity_term> ::=   
  { <simple_term> | <prefix_term> } { { { NEAR | ~ }   
     { <simple_term> | <prefix_term> } } [ ...n ] }  
  
<custom_proximity_term> ::=   
  NEAR (   
     {  
        { <simple_term> | <prefix_term> } [ ,...n ]  
     |  
        ( { <simple_term> | <prefix_term> } [ ,...n ] )   
      [, <maximum_distance> [, <match_order> ] ]  
     }  
       )   
  
      <maximum_distance> ::= { integer | MAX }  
      <match_order> ::= { TRUE | FALSE }   
  
<weighted_term> ::=   
  ISABOUT   
   ( {   
        {   
          <simple_term>   
        | <prefix_term>   
        | <generation_term>   
        | <proximity_term>   
        }   
      [ WEIGHT ( weight_value ) ]   
      } [ ,...n ]   
   )   
  
<AND> ::=   
  { AND | & }  
  
<AND NOT> ::=   
  { AND NOT | &! }  
  
<OR> ::=   
  { OR | | }  
  

ArgumenteArguments

column_namecolumn_name
Der Name einer volltextindizierten Spalte der in der FROM-Klausel angegebenen Tabelle.Is the name of a full-text indexed column of the table specified in the FROM clause. Die Spalten können vom Typ char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary oder varbinary(max) sein.The columns can be of type char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary, or varbinary(max).

column_listcolumn_list
Gibt zwei oder mehr durch Trennzeichen getrennte Spalten an.Specifies two or more columns, separated by commas. column_list muss in Klammern stehen.column_list must be enclosed in parentheses. Sofern nicht language_term angegeben ist, muss die Sprache aller Spalten von column_list identisch sein.Unless language_term is specified, the language of all columns of column_list must be the same.

*
Gibt an, dass die Abfrage alle volltextindizierten Spalten in der Tabelle durchsucht, die in der FROM-Klausel für die festgelegte Suchbedingung angegeben werden.Specifies that the query searches all full-text indexed columns in the table specified in the FROM clause for the given search condition. Die Spalten in der CONTAINS-Klausel müssen aus einer einzelnen Tabelle mit einem Volltextindex stammen.The columns in the CONTAINS clause must come from a single table that has a full-text index. Sofern language_term nicht angegeben ist, muss die Sprache aller Spalten in der Tabelle identisch sein.Unless language_term is specified, the language of all columns of the table must be the same.

PROPERTY ( column_name , 'property_name')PROPERTY ( column_name , 'property_name')
Gilt für: SQL Server 2012 (11.x)SQL Server 2012 (11.x) bis SQL Server 2017SQL Server 2017.Applies to: SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017.

Gibt eine Dokumenteigenschaft an, in der nach der angegebenen Suchbedingung gesucht werden soll.Specifies a document property on which to search for the specified search condition.

Wichtig

Damit von der Abfrage Zeilen zurückgegeben werden können, muss property_name in der Sucheigenschaftenliste des Volltextindexes angegeben werden, und der Volltextindex muss eigenschaftenspezifische Einträge für property_name enthalten.For the query to return any rows, property_name must be specified in the search property list of the full-text index and the full-text index must contain property-specific entries for property_name. Weitere Informationen finden Sie unter Suchen von Dokumenteigenschaften mithilfe von Sucheigenschaftenlisten.For more information, see Search Document Properties with Search Property Lists.

LANGUAGE language_termLANGUAGE language_term
Die Sprache, die für Wörtertrennung, Wortstammerkennung, Thesauruserweiterungen und -ersetzungen sowie die Entfernung von Füllwörtern (oder Stoppwörtern) im Rahmen der Abfrage verwendet werden soll.Is the language to use for word breaking, stemming, thesaurus expansions and replacements, and noise-word (or stopword) removal as part of the query. Dieser Parameter ist optional.This parameter is optional.

Wenn Dokumente anderer Sprachen zusammen als BLOBs (Binary Large Objects) in einer einzelnen Spalte gespeichert werden, bestimmt der Gebietsschemabezeichner (LCID) eines bestimmten Dokuments die zur Indizierung seines Inhalts zu verwendende Sprache.If documents of different languages are stored together as binary large objects (BLOBs) in a single column, the locale identifier (LCID) of a given document determines what language to use to index its content. Beim Abfragen einer solchen Spalte kann die Angabe von LANGUAGE language_term die Wahrscheinlichkeit einer hohen Übereinstimmung steigern.When querying such a column, specifying LANGUAGE language_term can increase the probability of a good match.

language_term kann als Zeichenfolge, Integer oder Hexadezimalwert entsprechend dem LCID einer Sprache angegeben werden.language_term can be specified as a string, integer, or hexadecimal value corresponding to the LCID of a language. Wird language_term angegeben, wird die entsprechende Sprache auf alle Elemente der Suchbedingung angewendet.If language_term is specified, the language it represents is applied to all elements of the search condition. Wird kein Wert angegeben, wird die Volltextsprache der Spalte verwendet.If no value is specified, the column full-text language is used.

In Form einer Zeichenfolge entspricht language_term dem Wert der alias-Spalte in der sys.syslanguages (Transact-SQL)-Kompatibilitätssicht.When specified as a string, language_term corresponds to the alias column value in the sys.syslanguages (Transact-SQL) compatibility view. Die Zeichenfolge muss in einfache Anführungszeichen gesetzt werden, z.B. 'language_term'.The string must be enclosed in single quotation marks, as in 'language_term'. In Form einer ganzen Zahl ist language_term der eigentliche Gebietsschemabezeichner, der die Sprache identifiziert.When specified as an integer, language_term is the actual LCID that identifies the language. In Form eines Hexadezimalwerts ist language_term gleich 0x, gefolgt vom Hexadezimalwert des Gebietsschemabezeichners.When specified as a hexadecimal value, language_term is 0x followed by the hexadecimal value of the LCID. Der Hexadezimalwert darf acht Ziffern nicht überschreiten, einschließlich führender Nullen.The hexadecimal value must not exceed eight digits, including leading zeros.

Wird der Wert im Format DBCS (Double-Byte Character Set, Doppelbyte-Zeichensatz) angegeben, wird er von SQL ServerSQL Server in Unicode konvertiert.If the value is in double-byte character set (DBCS) format, SQL ServerSQL Server converts it to Unicode.

Ist die angegebene Sprache ungültig oder sind keine Ressourcen installiert, die dieser Sprache entsprechen, gibt SQL ServerSQL Server einen Fehler zurück.If the language specified is not valid or there are no resources installed that correspond to that language, SQL ServerSQL Server returns an error. Geben Sie 0x0 als language_term an, um neutrale Sprachressourcen zu verwenden.To use the neutral language resources, specify 0x0 as language_term.

<contains_search_condition><contains_search_condition>
Gibt den Suchtext in column_name und die Bedingungen für eine Übereinstimmung an.Specifies the text to search for in column_name and the conditions for a match.

<contains_search_condition> ist vom Datentyp nvarchar.<contains_search_condition> is nvarchar. Wird ein anderer Zeichendatentyp als Eingabe verwendet, findet eine implizite Konvertierung statt.An implicit conversion occurs when another character data type is used as input. Die großen Zeichenfolgendatentypen nvarchar(max) und varchar(max) können nicht verwendet werden.Large string data types nvarchar(max) and varchar(max) cannot be used. Im folgenden Beispiel verursacht die @SearchWord-Variable, die als varchar(30) definiert ist, eine implizite Konvertierung im CONTAINS-Prädikat.In the following example, the @SearchWord variable, which is defined as varchar(30), causes an implicit conversion in the CONTAINS predicate.

USE AdventureWorks2012;  
GO  
DECLARE @SearchWord varchar(30)  
SET @SearchWord ='performance'  
SELECT Description   
FROM Production.ProductDescription   
WHERE CONTAINS(Description, @SearchWord);  

Da die „Parameterermittlung“ zusammen mit der Konvertierung nicht funktionsfähig ist, sollten Sie aus Leistungsgründen nvarchar verwenden.Because "parameter sniffing" does not work across conversion, use nvarchar for better performance. Deklarieren Sie im Beispiel @SearchWord als nvarchar(30).In the example, declare @SearchWord as nvarchar(30).

USE AdventureWorks2012;  
GO  
DECLARE @SearchWord nvarchar(30)  
SET @SearchWord = N'performance'  
SELECT Description   
FROM Production.ProductDescription   
WHERE CONTAINS(Description, @SearchWord);  

In Fällen, in denen ein nicht optimaler Plan generiert wird, können Sie auch den OPTIMIZE FOR-Abfragehinweis verwenden.You can also use the OPTIMIZE FOR query hint for cases in which a non optimal plan is generated.

wordword
Eine Zeichenfolge ohne Leerzeichen oder Satzzeichen.Is a string of characters without spaces or punctuation.

phrasephrase
Ein Wort oder mehrere Wörter, die durch Leerzeichen getrennt sind.Is one or more words with spaces between each word.

Hinweis

Einige Sprachen, wie z. B. die in einigen Teilen von Asien verwendeten Sprachen, können Ausdrücke besitzen, die aus mehreren Wörtern ohne Leerzeichen bestehen.Some languages, such as those written in some parts of Asia, can have phrases that consist of one or more words without spaces between them.

<simple_term><simple_term>
Gibt eine Übereinstimmung für ein genaues Wort oder einen genauen Ausdruck an.Specifies a match for an exact word or a phrase. Beispiele für gültige einfache Begriffe sind "blue berry", blueberry und "Microsoft SQL Server".Examples of valid simple terms are "blue berry", blueberry, and "Microsoft SQL Server". Ausdrücke müssen in doppelte Anführungszeichen ("") gesetzt werden.Phrases should be enclosed in double quotation marks (""). Die Wörter eines Ausdrucks werden nur dann in der Datenbank gefunden, wenn sie unter <contains_search_condition> in der gleichen Reihenfolge angegeben werden.Words in a phrase must appear in the same order as specified in <contains_search_condition> as they appear in the database column. Bei der Suche nach Zeichen in einem Wort oder einem Ausdruck wird nicht zwischen Groß- und Kleinschreibung unterschieden.The search for characters in the word or phrase is not case-sensitive. Füllwörter (oder Stoppwörter), z.B. „ein“, „und“ oder „die“, aus volltextindizierten Spalten werden nicht im Volltextindex gespeichert.Noise words (or stopwords) (such as a, and, or the) in full-text indexed columns are not stored in the full-text index. Wenn das einzige gesuchte Wort ein Füllwort ist, gibt SQL ServerSQL Server eine Fehlermeldung zurück, die angibt, dass lediglich Füllwörter als Suchbegriffe übergeben wurden.If a noise word is used in a single word search, SQL ServerSQL Server returns an error message indicating that the query contains only noise words. SQL ServerSQL Server enthält eine Standardliste der Füllwörter im Verzeichnis \Mssql\Binn\FTERef für jede Instanz von SQL ServerSQL Server.includes a standard list of noise words in the directory \Mssql\Binn\FTERef of each instance of SQL ServerSQL Server.

Satzzeichen werden nicht beachtet.Punctuation is ignored. Mit CONTAINS(testing, "computer failure") wird daher auch eine Zeile mit dem Wert "Where is my computer?Therefore, CONTAINS(testing, "computer failure") matches a row with the value, "Where is my computer? Failure to find it would be expensive." gefunden.Failure to find it would be expensive." Weitere Informationen zum Worttrennungsverhalten finden Sie unter Konfigurieren und Verwalten von Wörtertrennungen und Wortstammerkennungen für die Suche.For more information on word-breaker behavior, see Configure and Manage Word Breakers and Stemmers for Search.

<prefix_term><prefix_term>
Gibt eine Suche nach Wörtern oder Ausdrücken an, die mit dem angegebenen Text beginnen.Specifies a match of words or phrases beginning with the specified text. Setzen Sie einen Präfixausdruck (prefix_term) in doppelte Anführungszeichen (""), und setzen Sie ein Sternchen (*) vor das schließende Anführungszeichen, sodass jeglicher Text gefunden wird, der mit dem einfachen Ausdruck beginnt, der vor dem Sternchen steht.Enclose a prefix term in double quotation marks ("") and add an asterisk (*) before the ending quotation mark, so that all text starting with the simple term specified before the asterisk is matched. Die Klausel sollte wie folgt angegeben werden: CONTAINS (column, '"text*"')The clause should be specified this way: CONTAINS (column, '"text*"'). Das Sternchen entspricht keinem, einem oder mehreren Zeichen (des Hauptworts bzw. der Hauptwörter im Ausdruck).The asterisk matches zero, one, or more characters (of the root word or words in the word or phrase). Wenn der Text und das Sternchen nicht in doppelten Anführungszeichen stehen, sodass das Prädikat als CONTAINS (column, 'text*') gelesen wird, wird das Sternchen bei der Volltextsuche als Zeichen behandelt, und es wird nach exakten Übereinstimmungen mit text* gesucht.If the text and asterisk are not delimited by double quotation marks, so the predicate reads CONTAINS (column, 'text*'), full-text search considers the asterisk as a character and searches for exact matches to text*. Von der Volltext-Engine werden keine Wörter mit Sternchen (*) gefunden, da dieses Zeichen in der Regel von der Wörtertrennung ignoriert wird.The full-text engine will not find words with the asterisk (*) character because word breakers typically ignore such characters.

Ist <prefix_term> ein Ausdruck, wird jedes Wort, das in dem Ausdruck vorhanden ist, als separates Präfix behandelt.When <prefix_term> is a phrase, each word contained in the phrase is considered to be a separate prefix. Daher werden bei einer Abfrage des Präfixbegriffs "local wine*" als Übereinstimmung alle Zeilen mit dem Text "local winery", "locally wined and dined" usw. ausgegeben.Therefore, a query specifying a prefix term of "local wine*" matches any rows with the text of "local winery", "locally wined and dined", and so on.

<generation_term><generation_term>
Gibt eine Suche nach Wörtern an, wenn die enthaltenen einfachen Begriffe Varianten des ursprünglichen Worts enthalten, nach dem gesucht werden soll.Specifies a match of words when the included simple terms include variants of the original word for which to search.

INFLECTIONALINFLECTIONAL
Gibt an, dass die sprachenabhängige Wortstammerkennung für den angegebenen einfachen Ausdruck verwendet werden soll.Specifies that the language-dependent stemmer is to be used on the specified simple term. Das Verhalten der Wortstammerkennung wird auf der Grundlage von Wortstammerkennungsregeln für jede Sprache einzeln definiert.Stemmer behavior is defined based on stemming rules of each specific language. Der neutralen Sprache ist keine Wortstammerkennung zugeordnet.The neutral language does not have an associated stemmer. Auf die gewünschte Wortstammerkennung wird anhand der Spaltensprache der abgefragten Spalten verwiesen.The column language of the columns being queried is used to refer to the desired stemmer. Falls language_term angegeben ist, wird die dieser Sprache entsprechende Wortstammerkennung verwendet.If language_term is specified, the stemmer corresponding to that language is used.

Ein angegebener <simple_term>-Wert innerhalb von <generation_term> kann nicht sowohl mit Substantiven als auch mit Verben übereinstimmen.A given <simple_term> within a <generation_term> will not match both nouns and verbs.

THESAURUSTHESAURUS
Gibt an, dass der Thesaurus verwendet wird, der der Volltext-Spaltensprache oder der in der Abfrage angegebenen Sprache entspricht.Specifies that the thesaurus corresponding to the column full-text language, or the language specified in the query is used. Die längsten Muster aus <simple_term> werden mit dem Thesaurus verglichen, und weitere Ausdrücke werden generiert, um das ursprüngliche Muster zu erweitern oder zu ersetzen.The longest pattern or patterns from the <simple_term> are matched against the thesaurus and additional terms are generated to expand or replace the original pattern. Wird für den ganzen Ausdruck oder für Teile von <simple_term> keine Übereinstimmung gefunden, wird der nicht übereinstimmende Teil als simple_term behandelt.If a match is not found for all or part of the <simple_term>, the non-matching portion is treated as a simple_term. Weitere Informationen zum Thesaurus der Volltextsuche finden Sie unter Konfigurieren und Verwalten von Thesaurusdateien für die Volltextsuche.For more information on the full-text search thesaurus, see Configure and Manage Thesaurus Files for Full-Text Search.

<generic_proximity_term><generic_proximity_term>
Legt eine Übereinstimmung für Wörter oder Ausdrücke fest, die im durchsuchten Dokument vorhanden sein müssen.Specifies a match of words or phrases that must be in the document that is being searched.

Wichtig

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. Es wird empfohlen, <custom_proximity_term> zu verwenden.We recommend that you use <custom_proximity_term>.

NEAR | ~NEAR | ~
Gibt an, dass das Wort oder der Ausdruck auf beiden Seiten des NEAR-Operators bzw. ~-Operators in einem Dokument vorhanden sein muss, damit eine Übereinstimmung zurückgegeben wird.Indicates that the word or phrase on each side of the NEAR or ~ operator must occur in a document for a match to be returned. Sie müssen zwei Suchbegriffe angeben.You must specify two search terms. Ein Suchbegriff kann ein einzelnes Wort oder ein Ausdruck sein, der in doppelte Anführungszeichen ("Ausdruck") eingeschlossen wird.A given search term can be either a single word or a phrase that is delimited by double quotation marks ("phrase").

Mehrere NEAR-Begriffe können wie in a NEAR b NEAR c oder a ~ b ~ c verkettet werden.Several proximity terms can be chained, as in a NEAR b NEAR c or a ~ b ~ c. Damit eine Übereinstimmung zurückgegeben wird, müssen alle verketteten Ausdrücke, die nahe beieinander stehen sollen, im Dokument vorhanden sein.Chained proximity terms must all be in the document for a match to be returned.

Beispielsweise geben CONTAINS(*column_name*, 'fox NEAR chicken') und CONTAINSTABLE(*table_name*, *column_name*, 'fox ~ chicken') alle Dokumente in der angegebenen Spalte zurück, die sowohl „Fuchs“ als auch „Huhn“ enthalten.For example, CONTAINS(*column_name*, 'fox NEAR chicken') and CONTAINSTABLE(*table_name*, *column_name*, 'fox ~ chicken') would both return any documents in the specified column that contain both "fox" and "chicken". Außerdem gibt CONTAINSTABLE einen nach dem Abstand von "Fuchs" und "Huhn" bestimmten Rang für jedes Dokument zurück.In addition, CONTAINSTABLE returns a rank for each document based on the proximity of "fox" and "chicken". Wenn ein Dokument etwa den Satz "Der Fuchs fraß das Huhn." enthält, wäre sein Rang hoch, da die Begriffe näher beieinander sind als in anderen Dokumenten.For example, if a document contains the sentence, "The fox ate the chicken," its ranking would be high because the terms are closer to one another than in other documents.

Weitere Informationen zu generischen NEAR-Begriffen finden Sie unter Suchen von Wörtern in der Nähe eines anderen Worts mit NEAR.For more information about generic proximity terms, see Search for Words Close to Another Word with NEAR.

<custom_proximity_term><custom_proximity_term>
Gilt für: SQL Server 2012 (11.x)SQL Server 2012 (11.x) bis SQL Server 2017SQL Server 2017.Applies to: SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017.

Gibt eine Übereinstimmung von Wörtern oder Ausdrücken sowie optional den maximalen Abstand zwischen den Suchbegriffen an.Specifies a match of words or phrases, and optionally, the maximum distance allowed between search terms. Sie können auch angeben, dass Suchbegriffe in der exakten Reihenfolge gesucht werden müssen, in der Sie sie (<match_order>) angegeben haben.you can also specify that search terms must be found in the exact order in which you specify them (<match_order>).

Ein Suchbegriff kann ein einzelnes Wort oder ein Ausdruck sein, der in doppelte Anführungszeichen ("Ausdruck") eingeschlossen wird.A given search term can be either a single word or a phrase that is delimited by double quotation marks ("phrase"). Damit eine Übereinstimmung zurückgegeben wird, müssen alle angegeben Ausdrücke im Dokument vorhanden sein.Every specified term must be in the document for a match to be returned. Sie müssen mindestens zwei Suchbegriffe angeben.You must specify at least two search terms. Die maximale Anzahl von Suchbegriffen ist 64.The maximum number of search terms is 64.

Standardmäßig werden vom benutzerdefinierten NEAR-Begriff alle Zeilen zurückgegeben, die die angegebenen Begriffe enthalten, unabhängig vom Abstand dazwischen und unabhängig von der Reihenfolge.By default, the custom proximity term returns any rows that contain the specified terms regardless of the intervening distance and regardless of their order. Beispielsweise müsste eine Dokument nur term1 und "term3 term4" an beliebiger Position und in beliebiger Reihenfolge enthalten, um der Abfrage zu entsprechen:For example, to match the following query, a document would simply need to contain term1 and "term3 term4" anywhere, in any order:

CONTAINS(column_name, 'NEAR(term1,"term3 term4")')  

Die optionalen Parameter lauten wie folgt:The optional parameters are as follows:

<maximum_distance><maximum_distance>
Gibt den maximal zulässigen Abstand zwischen den Suchbegriffen am Anfang und Ende einer Zeichenfolge an, damit diese als Übereinstimmung gilt.Specifies the maximum distance allowed between the search terms at the start and end of a string in order for that string to qualify as a match.

integerinteger
Gibt eine positive ganze Zahl zwischen 0 und 4294967295 an.Specifies a positive integer from 0 to 4294967295. Mit diesem Wert wird festgelegt, wie viele Begriffe, die keine Suchbegriffe sind, mit Ausnahme weiterer angegebener Suchbegriffe zwischen dem ersten und dem letzten Suchbegriff stehen dürfen.This value controls how many non-search terms can occur between the first and last search terms, excluding any additional specified search terms.

Beispielsweise wird mit der folgenden Abfrage nach AA und BB gesucht. Die Reihenfolge ist dabei nicht vorgegeben, und der maximale Abstand zwischen den beiden Suchbegriffen darf fünf Wörter betragen.For example, the following query searches for AA and BB, in either order, within a maximum distance of five.

CONTAINS(column_name, 'NEAR((AA,BB),5)')  

Die Zeichenfolge AA one two three four five BB stellt eine Übereinstimmung dar.The string AA one two three four five BB would be a match. Im folgenden Beispiel werden von der Abfrage drei Suchbegriffe (AA, BB und CC) mit einem maximalen Abstand von fünf Wörtern angegeben:In the following example, the query specifies for three search terms, AA, BB, and CC within a maximum distance of five:

CONTAINS(column_name, 'NEAR((AA,BB,CC),5)')  

Diese Abfrage würde der folgenden Zeichenfolge mit dem Gesamtabstand fünf Wörter entsprechen:This query would match the following string, in which the total distance is five:

BB one two CC three four five A A

Beachten Sie, dass der innere Suchbegriff CC nicht mitgezählt wird.Notice that the inner search term, CC, is not counted.

MAXMAX
Gibt alle Zeilen zurück, die die angegebenen Begriffe enthalten, unabhängig von der Entfernung dazwischen.Returns any rows that contain the specified terms regardless of the distance between them. Dies ist die Standardeinstellung.This is the default.

<match_order><match_order>
Gibt an, ob die Begriffe in der angegebenen Reihenfolge auftreten müssen, um von einer Suchabfrage zurückgegeben zu werden.Specifies whether the terms must occur in the specified order to be returned by a search query. Wenn Sie <match_order> verwenden möchten, müssen Sie auch <maximum_distance> angeben.To specify <match_order>, you must also specify <maximum_distance>.

<match_order> akzeptiert einen der folgenden Werte:<match_order> takes one of the following values:

TRUETRUE
Erzwingt die angegebene Reihenfolge in Begriffen.Enforces the specified order within terms. Beispielsweise würde NEAR(A,B) nur A ... B entsprechen.For example, NEAR(A,B) would match only A ... B.

FALSEFALSE
Ignoriert die angegebene Reihenfolge.Ignores the specified order. Beispielsweise würde NEAR(A,B) sowohl A ... B als auch B ... A entsprechen.For example, NEAR(A,B) would match both A ... B and B ... A.

Dies ist die Standardeinstellung.This is the default.

Beispielsweise wird in den folgenden NEAR-Suchvorgängen nach den Wörtern "Monday", "Tuesday" und "Wednesday" in der angegebene Reihenfolge gesucht, unabhängig vom Abstand zwischen den Begriffen:For example, the following proximity term searches the words "Monday", "Tuesday", and "Wednesday" in the specified order with regardless of the distance between them:

CONTAINS(column_name, 'NEAR ((Monday, Tuesday, Wednesday), MAX, TRUE)')  

Weitere Informationen zu benutzerdefinierten NEAR-Begriffen finden Sie unter Suchen von Wörtern in der Nähe eines anderen Worts mit NEAR.For more information about using custom proximity terms, see Search for Words Close to Another Word with NEAR.

<weighted_term><weighted_term>
Gibt an, dass die übereinstimmenden Zeilen (die von der Abfrage zurückgegeben werden) mit einer Liste von Wörtern und Ausdrücken übereinstimmen müssen, die optional jeweils mit einem Gewichtungswert versehen sind.Specifies that the matching rows (returned by the query) match a list of words and phrases, each optionally given a weighting value.

ISABOUTISABOUT
Gibt das Schlüsselwort <weighted_term> an.Specifies the <weighted_term> keyword.

WEIGHT(weight_value)WEIGHT(weight_value)
Gibt einen Gewichtungswert von 0,0 bis 1,0 an.Specifies a weight value, which is a number from 0.0 through 1.0. Jede Komponente in <weighted_term> kann auch einen weight_value enthalten.Each component in <weighted_term> may include a weight_value. weight_value kann die Art und Weise beeinflussen, wie sich verschiedene Teilabfragen auf den Rangwert auswirken, der jeder mit der Abfrage übereinstimmenden Zeile zugewiesen ist.weight_value is a way to change how various portions of a query affect the rank value assigned to each row matching the query. WEIGHT hat keine Auswirkung auf die Ergebnisse von CONTAINS-Abfragen, beeinflusst jedoch den Rang in CONTAINSTABLE-Abfragen.WEIGHT does not affect the results of CONTAINS queries, but WEIGHT impacts rank in CONTAINSTABLE queries.

Hinweis

Das Dezimaltrennzeichen ist immer ein Punkt, unabhängig vom Betriebssystemgebietsschema.The decimal separator is always a period, regardless of the operating system locale.

{ AND | & } | { AND NOT | &!{ AND | & } | { AND NOT | &! } | { OR | | } } | { OR | | }
Gibt einen logischen Vorgang zwischen zwei CONTAINS-Suchbedingungen an.Specifies a logical operation between two contains search conditions.

{ AND | & }{ AND | & }
Gibt an, dass die beiden CONTAINS-Suchbedingungen für eine Übereinstimmung erfüllt sein müssen.Indicates that the two contains search conditions must be met for a match. Das kaufmännische Und-Zeichen (&) kann an Stelle des AND-Schlüsselworts zur Darstellung des AND-Operators verwendet werden.The ampersand symbol (&) may be used instead of the AND keyword to represent the AND operator.

{ AND NOT | &!{ AND NOT | &! }}
Gibt an, dass die zweite CONTAINS-Suchbedingung für eine Übereinstimmung nicht erfüllt sein darf.Indicates that the second search condition must not be present for a match. Das kaufmännische Und-Zeichen gefolgt von einem Ausrufezeichen (&!) kann an Stelle des AND NOT-Schlüsselworts zur Darstellung des AND NOT-Operators verwendet werden.The ampersand followed by the exclamation mark symbol (&!) may be used instead of the AND NOT keyword to represent the AND NOT operator.

{ OR | | }{ OR | | }
Gibt an, dass eine der beiden CONTAINS-Suchbedingungen für eine Übereinstimmung erfüllt sein muss.Indicates that either of the two contains search conditions must be met for a match. Der senkrechte Strich (|) kann an Stelle des OR-Schlüsselsorts zur Darstellung des OR-Operators verwendet werden.The bar symbol (|) may be used instead of the OR keyword to represent the OR operator.

Wenn in <contains_search_condition> in Klammern gesetzte Gruppen enthalten sind, werden diese zuerst ausgewertet.When <contains_search_condition> contains parenthesized groups, these parenthesized groups are evaluated first. Nach der Auswertung der in Klammern gesetzten Gruppen gelten folgende Regeln bei der Verwendung der logischen Operatoren mit den CONTAINS-Suchbedingungen:After evaluating parenthesized groups, these rules apply when using these logical operators with contains search conditions:

  • NOT wird vor AND angewendet.NOT is applied before AND.

  • NOT kann nur nach AND auftreten, wie in AND NOT.NOT can only occur after AND, as in AND NOT. Der Operator OR NOT ist nicht zugelassen.The OR NOT operator is not allowed. NOT kann nicht vor dem ersten Ausdruck angegeben werden.NOT cannot be specified before the first term. Beispielsweise ist Folgendes nicht zulässig: CONTAINS (mycolumn, 'NOT "phrase_to_search_for" ' ).For example, CONTAINS (mycolumn, 'NOT "phrase_to_search_for" ' ) is not valid.

  • AND wird vor OR angewendet.AND is applied before OR.

  • Da boolesche Operatoren des gleichen Typs (AND, OR) assoziativ sind, können sie in beliebiger Reihenfolge angewendet werden.Boolean operators of the same type (AND, OR) are associative and can therefore be applied in any order.

nn
Ein Platzhalter, der anzeigt, dass mehrere CONTAINS-Suchbedingungen und darin enthaltene Begriffe angegeben werden können.Is a placeholder indicating that multiple CONTAINS search conditions and terms within them can be specified.

Allgemeine HinweiseGeneral Remarks

Volltextprädikate und -funktionen gelten für eine einzelne Tabelle, die im FROM-Prädikat enthalten ist.Full-text predicates and functions work on a single table, which is implied in the FROM predicate. Um eine Suche in mehreren Tabellen auszuführen, können Sie eine verknüpfte Tabelle in der FROM-Klausel verwenden, um in einem Resultset zu suchen, das aus mindestens zwei Tabellen erstellt wird.To search on multiple tables, use a joined table in your FROM clause to search on a result set that is the product of two or more tables.

Volltextprädikate sind in der OUTPUT-Klausel nicht zulässig, wenn der Kompatibilitätsgrad der Datenbank auf 100 festgelegt ist.Full-text predicates are not allowed in the OUTPUT clause when the database compatibility level is set to 100.

Abfragen von RemoteservernQuerying Remote Servers

Sie können einen vierteiligen Namen im CONTAINS- oder FREETEXT-Prädikat zum Abfragen von volltextindizierten Spalten der Zieltabellen auf einem Verbindungsserver verwenden.You can use a four-part name in the CONTAINS or FREETEXT predicate to query full-text indexed columns of the target tables on a linked server. Erstellen Sie zum Vorbereiten eines Remoteservers für den Empfang von Volltextabfragen einen Volltextindex für die Zieltabellen und -spalten auf dem Remoteserver, und fügen Sie anschließend den Remoteserver als Verbindungsserver hinzu.To prepare a remote server to receive full-text queries, create a full-text index on the target tables and columns on the remote server and then add the remote server as a linked server.

Im Gegensatz zur Volltextsuche verarbeitet das LIKETransact-SQLTransact-SQL-Prädikat ausschließlich Zeichenmuster.In contrast to full-text search, the LIKETransact-SQLTransact-SQL predicate works on character patterns only. Darüber hinaus können Sie mit dem LIKE-Prädikat keine formatierten Binärdaten abfragen.Also, you cannot use the LIKE predicate to query formatted binary data. Eine LIKE-Abfrage in umfangreichen unstrukturierten Textdaten ist sehr viel langsamer als eine entsprechende Volltextabfrage in denselben Daten.Furthermore, a LIKE query against a large amount of unstructured text data is much slower than an equivalent full-text query against the same data. Eine LIKE-Abfrage für Millionen von Zeilen von Textdaten kann Minuten in Anspruch nehmen; eine Volltextabfrage kann dagegen in Sekunden oder weniger für dieselben Daten ein Ergebnis liefern, je nach Anzahl und Größe der zurückgegebenen Zeilen.A LIKE query against millions of rows of text data can take minutes to return; whereas a full-text query can take only seconds or less against the same data, depending on the number of rows that are returned and their size. Ein weiterer Aspekt ist, dass mit LIKE nur eine einfache Mustersuche in einer ganzen Tabelle durchgeführt wird.Another consideration is that LIKE performs only a simple pattern scan of an entire table. Bei einer Volltextabfrage wird hingegen die Sprache beachtet und zur Indizierungs- und Abfragezeit werden bestimmte Transformationen vorgenommen, beispielsweise das Filtern von Stoppwörtern oder Anwenden von Thesaurus- und Flexionserweiterungen.A full-text query, in contrast, is language aware, applying specific transformations at index and query time, such as filtering stopwords and making thesaurus and inflectional expansions. Diese Transformationen helfen Volltextabfragen, die Genauigkeit von Rückrufen sowie die abschließende Rangfolge der Ergebnisse zu verbessern.These transformations help full-text queries improve their recall and the final ranking of their results.

Sie können mehrere Spalten abfragen, indem Sie eine Liste von Spalten angeben, die durchsucht werden sollen.You can query multiple columns by specifying a list of columns to search. Die Spalten müssen sich in derselben Tabelle befinden.The columns must be from the same table.

Beispielsweise wird mit der folgenden CONTAINS-Abfrage nach dem Begriff Red in den Spalten Name und Color der Tabelle Production.Product für die AdventureWorks2012AdventureWorks2012-Beispieldatenbank gesucht.For example, the following CONTAINS query searches for the term Red in the Name and Color columns of the Production.Product table of the AdventureWorks2012AdventureWorks2012 sample database.

Use AdventureWorks2012;  
GO  
SELECT Name, Color   
FROM Production.Product  
WHERE CONTAINS((Name, Color), 'Red');  

BeispieleExamples

A.A. Verwenden von CONTAINS mit <simple_term>Using CONTAINS with <simple_term>

Im folgenden Beispiel werden alle Produkte mit einem Preis von $80.99 gesucht, die das Wort Mountainenthalten.The following example finds all products with a price of $80.99 that contain the word Mountain.

USE AdventureWorks2012;  
GO  
SELECT Name, ListPrice  
FROM Production.Product  
WHERE ListPrice = 80.99  
   AND CONTAINS(Name, 'Mountain');  
GO  

B.B. Verwenden von CONTAINS und einem Ausdruck mit <simple_term>Using CONTAINS and phrase with <simple_term>

Im folgenden Beispiel werden alle Produkte zurückgegeben, die entweder den Ausdruck Mountain oder Road enthalten.The following example returns all products that contain either the phrase Mountain or Road.

USE AdventureWorks2012;  
GO  
SELECT Name  
FROM Production.Product  
WHERE CONTAINS(Name, ' Mountain OR Road ')  
GO  

C.C. Verwenden von CONTAINS mit <prefix_term>Using CONTAINS with <prefix_term>

Im folgenden Beispiel werden alle Produktnamen zurückgegeben, die mindestens ein Wort enthalten, das mit dem Präfix chain in der Name-Spalte beginnt.The following example returns all product names with at least one word starting with the prefix chain in the Name column.

USE AdventureWorks2012;  
GO  
SELECT Name  
FROM Production.Product  
WHERE CONTAINS(Name, ' "Chain*" ');  
GO  

D.D. Verwenden von CONTAINS und OR mit <prefix_term>Using CONTAINS and OR with <prefix_term>

Im folgenden Beispiel werden alle Kategoriebeschreibungen zurückgegeben, die Zeichenfolgen mit dem Präfix chain oder full enthalten.The following example returns all category descriptions containing strings with prefixes of either chain or full.

USE AdventureWorks2012;  
GO  
SELECT Name  
FROM Production.Product  
WHERE CONTAINS(Name, '"chain*" OR "full*"');  
GO  

E.E. Verwenden von CONTAINS mit <proximity_term>Using CONTAINS with <proximity_term>

Gilt für: SQL Server 2012 (11.x)SQL Server 2012 (11.x) bis SQL Server 2017SQL Server 2017.Applies to: SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017.

Im folgenden Beispiel wird in der Production.ProductReview-Tabelle nach allen Kommentaren gesucht, die das Wort bike maximal 10 Begriffe vom Wort control entfernt und in der angegebenen Reihenfolge enthalten (d.h. bike vor control).The following example searches the Production.ProductReview table for all comments that contain the word bike within 10 terms of the word "control" and in the specified order (that is, where "bike" precedes "control").

USE AdventureWorks2012;  
GO  
SELECT Comments  
FROM Production.ProductReview  
WHERE CONTAINS(Comments , 'NEAR((bike,control), 10, TRUE)');  
GO  

F.F. Verwenden von CONTAINS mit <generation_term>Using CONTAINS with <generation_term>

Im folgenden Beispiel wird nach allen Produkten gesucht, bei denen Wortformen von ride verwendet werden: "riding", "ridden" usw.The following example searches for all products with words of the form ride: riding, ridden, and so on.

USE AdventureWorks2012;  
GO  
SELECT Description  
FROM Production.ProductDescription  
WHERE CONTAINS(Description, ' FORMSOF (INFLECTIONAL, ride) ');  
GO  

G.G. Verwenden von CONTAINS mit <weighted_term>Using CONTAINS with <weighted_term>

Im folgenden Beispiel wird nach allen Produktnamen gesucht, die die Wörter performance, comfortable oder smooth enthalten, wobei jedes Wort anders gewichtet wird.The following example searches for all product names containing the words performance, comfortable, or smooth, and different weights are given to each word.

USE AdventureWorks2012;  
GO  
SELECT Description  
FROM Production.ProductDescription  
WHERE CONTAINS(Description, 'ISABOUT (performance weight (.8),   
comfortable weight (.4), smooth weight (.2) )' );  
GO  

H.H. Verwenden von CONTAINS mit VariablenUsing CONTAINS with variables

Im folgenden Beispiel wird kein bestimmter Suchbegriff, sondern eine Variable verwendet.The following example uses a variable instead of a specific search term.

USE AdventureWorks2012;  
GO  
DECLARE @SearchWord nvarchar(30)  
SET @SearchWord = N'Performance'  
SELECT Description   
FROM Production.ProductDescription   
WHERE CONTAINS(Description, @SearchWord);  
GO  

I.I. Verwenden von CONTAINS mit einem logischen Operator (AND)Using CONTAINS with a logical operator (AND)

Im folgenden Beispiel wird die ProductDescription-Tabelle der AdventureWorks2012AdventureWorks2012 -Datenbank verwendet.The following example uses the ProductDescription table of the AdventureWorks2012AdventureWorks2012 database. In der Abfrage wird das CONTAINS-Prädikat für die Suche nach Beschreibungen verwendet, deren Beschreibungs-ID ungleich 5 ist und die das Wort Aluminum sowie das Wort spindle enthalten.The query uses the CONTAINS predicate to search for descriptions in which the description ID is not equal to 5 and the description contains both the word Aluminum and the word spindle. In der Suchbedingung wird der boolesche AND-Operator verwendet.The search condition uses the AND Boolean operator.

USE AdventureWorks2012;  
GO  
SELECT Description  
FROM Production.ProductDescription  
WHERE ProductDescriptionID <> 5 AND  
   CONTAINS(Description, 'Aluminum AND spindle');  
GO  

J.J. Verwenden von CONTAINS, um eine Zeileneinfügung zu überprüfenUsing CONTAINS to verify a row insertion

Im folgenden Beispiel wird CONTAINS in einer SELECT-Unterabfrage verwendet.The following example uses CONTAINS within a SELECT subquery. Mithilfe der AdventureWorks2012AdventureWorks2012-Datenbank ruft die Abfrage den Kommentarwert aller Kommentare in der ProductReview-Tabelle für einen bestimmten Zyklus ab.Using the AdventureWorks2012AdventureWorks2012 database, the query obtains the comment value of all the comments in the ProductReview table for a particular cycle. In der Suchbedingung wird der boolesche AND-Operator verwendet.The search condition uses the AND Boolean operator.

USE AdventureWorks2012;  
GO  
INSERT INTO Production.ProductReview   
  (ProductID, ReviewerName, EmailAddress, Rating, Comments)   
VALUES  
  (780, 'John Smith', 'john@fourthcoffee.com', 5,   
'The Mountain-200 Silver from AdventureWorks2008 Cycles meets and exceeds expectations. I enjoyed the smooth ride down the roads of Redmond');  
  
-- Given the full-text catalog for these tables is Adv_ft_ctlg,   
-- with change_tracking on so that the full-text indexes are updated automatically.  
WAITFOR DELAY '00:00:30';     
-- Wait 30 seconds to make sure that the full-text index gets updated.  
  
SELECT r.Comments, p.Name  
FROM Production.ProductReview AS r  
JOIN Production.Product AS p   
    ON r.ProductID = p.ProductID  
    AND r.ProductID = (SELECT ProductID  
FROM Production.ProductReview  
WHERE CONTAINS (Comments,   
    ' AdventureWorks2008 AND   
    Redmond AND   
    "Mountain-200 Silver" '));  
GO  

K.K. Abfragen von DokumenteigenschaftenQuerying on a document property

Gilt für: SQL Server 2012 (11.x)SQL Server 2012 (11.x) bis SQL Server 2017SQL Server 2017.Applies to: SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017.

Die folgende Abfrage sucht nach einer indizierten Eigenschaft (Title) in der Document-Spalte der Production.Document-Tabelle.The following query searches on an indexed property, Title, in the Document column of the Production.Document table. Die Abfrage gibt nur Dokumente zurück, deren Title-Eigenschaft die Zeichenfolge Maintenance oder Repair enthält.The query returns only documents whose Title property contains the string Maintenance or Repair.

Hinweis

Damit bei einer Eigenschaftensuche, Zeilen zurückgegeben werden können, muss die angegebene Eigenschaften von den Filtern extrahiert werden, die die Spalte während der Indexierung analysieren.For a property-search to return rows, the filter or filters that parse the column during indexing must extract the specified property. Zudem muss der Volltextindex der jeweiligen Tabelle so konfiguriert sein, dass er die Eigenschaft einschließt.Also, the full-text index of the specified table must have been configured to include the property. Weitere Informationen finden Sie unter Suchen von Dokumenteigenschaften mithilfe von Sucheigenschaftenlisten.For more information, see Search Document Properties with Search Property Lists.

Use AdventureWorks2012;  
GO  
SELECT Document 
FROM Production.Document  
WHERE CONTAINS(PROPERTY(Document,'Title'), 'Maintenance OR Repair');  
GO  

Weitere InformationenSee Also

Erste Schritte mit der Volltextsuche Get Started with Full-Text Search
Erstellen und Verwalten von Volltextkatalogen Create and Manage Full-Text Catalogs
CREATE FULLTEXT CATALOG (Transact-SQL) CREATE FULLTEXT CATALOG (Transact-SQL)
CREATE FULLTEXT INDEX (Transact-SQL) CREATE FULLTEXT INDEX (Transact-SQL)
Erstellen und Verwalten von Volltextindizes Create and Manage Full-Text Indexes
Abfragen mit Volltextsuche Query with Full-Text Search
CONTAINSTABLE (Transact-SQL) CONTAINSTABLE (Transact-SQL)
FREETEXT (Transact-SQL) FREETEXT (Transact-SQL)
FREETEXTTABLE (Transact-SQL) FREETEXTTABLE (Transact-SQL)
Abfragen mit Volltextsuche Query with Full-Text Search
Volltextsuche Full-Text Search
Erstellen von Volltextsuchabfragen (Visual Database Tools) Create Full-Text Search Queries (Visual Database Tools)
WHERE (Transact-SQL) WHERE (Transact-SQL)
Suchen von Dokumenteigenschaften mithilfe von SucheigenschaftenlistenSearch Document Properties with Search Property Lists