CONTAINSTABLE (Transact-SQL)CONTAINSTABLE (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

Gibt eine Tabelle mit 0 (null), einer oder mehreren Zeilen für alle Spalten mit genauen oder ungenauen (Fuzzy-) Übereinstimmungen mit einzelnen Wörtern und Satzteilen, für den Abstand von Wörtern in einer bestimmten Entfernung voneinander oder gewichtete Treffer zurück.Returns a table of zero, one, or more rows for those columns containing precise or fuzzy (less precise) matches to single words and phrases, the proximity of words within a certain distance of one another, or weighted matches. CONTAINSTABLE wird verwendet, der FROM-Klausel von einem Transact-SQLTransact-SQL SELECT-Anweisung aus, und auf die verwiesen wird, als handele es sich um einen regulären Tabellennamen.CONTAINSTABLE is used in the FROM clause of a Transact-SQLTransact-SQL SELECT statement and is referenced as if it were a regular table name. Es wird eine SQL ServerSQL Server-Volltextsuche für volltextindizierte Spalten mit zeichenbasierten Datentypen durchgeführt.It performs a SQL ServerSQL Server full-text search on full-text indexed columns containing character-based data types.

CONTAINSTABLE ist geeignet für dieselben Arten von Übereinstimmungen, als die CONTAINS-Prädikat und verwendet die gleichen suchbedingungen wie CONTAINS.CONTAINSTABLE is useful for the same kinds of matches as the CONTAINS predicate and uses the same search conditions as CONTAINS.

Im Gegensatz zu CONTAINS werden bei Abfragen mit CONTAINSTABLE ein Relevanzrangfolgenwert (Relevance Ranking Value, RANK) und ein Volltextschlüssel (KEY) für jede Zeile zurückgeben.Unlike CONTAINS, however, queries using CONTAINSTABLE return a relevance ranking value (RANK) and full-text key (KEY) for each row. 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 Syntax Conventions (Transact-SQL-Syntaxkonventionen)Topic link icon Transact-SQL Syntax Conventions

SyntaxSyntax

  
CONTAINSTABLE   
( table , { column_name | ( column_list ) | * } , ' <contains_search_condition> '   
     [ , LANGUAGE language_term]   
  [ , top_n_by_rank ]   
)   
  
<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 ]   
    )  
  

ArgumenteArguments

tabletable
Der Name einer Tabelle, die volltextindiziert wurde.Is the name of a table that has been full-text indexed. Tabelle kann ein ein-, zwei-, drei- oder vierteiliger Datenbankobjekt-Name sein.table can be a one-, two-, three-, or four-part database object name. Bei der Abfrage einer Sicht kann nur eine volltextindizierte Basistabelle verwendet werden.When querying a view, only one full-text indexed base table can be involved.

Tabelle kann keinen Servernamen angeben und nicht in Abfragen auf Verbindungsservern verwendet werden.table cannot specify a server name and cannot be used in queries against linked servers.

column_namecolumn_name
Der Name einer oder mehreren Spalten, die für die Volltextsuche indiziert werden.Is the name of one or more columns that are indexed for full-text searching. 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 an, dass verschiedene, durch Trennzeichen getrennte Spalten angegeben werden können.Indicates that several columns, separated by a comma, can be specified. 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 alle volltextindizierten Spalten in indizierten Tabelle sollte verwendet werden, um die festgelegte Suchbedingung gesucht.Specifies that all full-text indexed columns in table should be used to search for the given search condition. 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.

LANGUAGE language_termLANGUAGE language_term
Die Sprache, deren Ressourcen für die wörtertrennung, wortstammerkennung und Thesaurus und Füllwörtern verwendet werden (oder Stoppwort) entfernen, die als Teil der Abfrage.Is the language whose resources will be used for word breaking, stemming, and thesaurus and noise-word (or stopword) removal as part of the query. Dieser Parameter ist optional und kann als Zeichenfolge, ganze Zahl oder Hexadezimalwert entsprechend dem Gebietsschemabezeichner (Locale Identifier – LCID) einer Sprache angegeben werden.This parameter is optional and can be specified as a string, integer, or hexadecimal value corresponding to the locale identifier (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 will be 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.

Wenn Dokumente anderer Sprachen zusammen als BLOBs (Binary Large Objects) in einer einzelnen Spalte gespeichert werden, legt der Gebietsschemabezeichner (LCID) eines bestimmten Dokuments die zur Indizierung seines Inhalts zu verwendende Sprache fest.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 is used 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.

Wenn als Zeichenfolge angegeben Language_term entspricht der Alias Spaltenwert in der sys.syslanguages -kompatibilitätssicht angezeigt.When specified as a string, language_term corresponds to the alias column value in the sys.syslanguages 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 Doppelbyte-Zeichensatz (Double-Byte Character Set, DBCS) angegeben, wird er von MicrosoftMicrosoft SQL ServerSQL Server in Unicode konvertiert.If the value is in double-byte character set (DBCS) format, MicrosoftMicrosoft SQL ServerSQL Server will convert 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.

top_n_by_ranktop_n_by_rank
Gibt an, dass nur die n höchste Übereinstimmungen in absteigender Reihenfolge zurückgegeben werden.Specifies that only the n highest ranked matches, in descending order, are returned. Gilt nur, wenn ein Ganzzahlwert n, angegeben wird.Applies only when an integer value, n, is specified. Wenn top_n_by_rank mit anderen Parametern kombiniert wird, werden von der Abfrage möglicherweise weniger Zeilen zurückgegeben als die Anzahl von Zeilen, die mit allen Prädikaten übereinstimmen.If top_n_by_rank is combined with other parameters, the query could return fewer rows than the number of rows that actually match all the predicates. Top_n_by_rank lässt sich die abfrageleistung zu erhöhen, indem Sie nur die relevantesten Treffer erneut aufrufen.top_n_by_rank allows you to increase query performance by recalling only the most relevant hits.

<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. Weitere Informationen zu suchbedingungen, finden Sie unter CONTAINS (Transact-SQL).For information about search conditions, see CONTAINS (Transact-SQL).

HinweiseRemarks

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.

Die zurückgegebene Tabelle besitzt eine Spalte namens Schlüssel , Volltext-Schlüsselwerte enthält.The table returned has a column named KEY that contains full-text key values. Jeder indizierten Volltexttabelle verfügt über eine Spalte, deren Werte garantiert eindeutig sein, und die Rückgabewerte der Schlüssel Spalte sind die Volltext-Schlüsselwerte der Zeilen, die die angegebenen Auswahlkriterien in entsprechen die Suche enthält Bedingung.Each full-text indexed table has a column whose values are guaranteed to be unique, and the values returned in the KEY column are the full-text key values of the rows that match the selection criteria specified in the contains search condition. Die TableFulltextKeyColumn Eigenschaft, die von der OBJECTPROPERTYEX-Funktion stellt die Identität diese eindeutige Schlüsselspalte bereit.The TableFulltextKeyColumn property, obtained from the OBJECTPROPERTYEX function, provides the identity of this unique key column. Verwenden Sie zum Abrufen der ID der Spalte verknüpft ist, mit dem Schlüssel Volltext-die Volltextindex- Sys. fulltext_indexes.To obtain the ID of the column associated with the full-text key of the full-text index, use sys.fulltext_indexes. Weitere Informationen finden Sie unter Sys. fulltext_indexes (Transact-SQL).For more information, see sys.fulltext_indexes (Transact-SQL).

Geben Sie einen Join mit den CONTAINSTABLE-Zeilen an, um die gewünschten Zeilen der Originaltabelle zu erhalten.To obtain the rows you want from the original table, specify a join with the CONTAINSTABLE rows. CONTAINSTABLE wird meist in folgender Form in der FROM-Klausel einer SELECT-Anweisung verwendet:The typical form of the FROM clause for a SELECT statement using CONTAINSTABLE is:

SELECT select_list  
FROM table AS FT_TBL INNER JOIN  
   CONTAINSTABLE(table, column, contains_search_condition) AS KEY_TBL  
   ON FT_TBL.unique_key_column = KEY_TBL.[KEY];  

Die von CONTAINSTABLE erstellte Tabelle enthält eine Spalte namens Rang.The table produced by CONTAINSTABLE includes a column named RANK. Die Rang Spalte ist ein Wert (von 0 bis 1000) für jede Zeile, der angibt, wie gut eine Zeile mit den Auswahlkriterien übereinstimmen.The RANK column is a value (from 0 through 1000) for each row indicating how well a row matched the selection criteria. Dieser Rangwert wird in der SELECT-Anweisung üblicherweise auf folgende Weise verwendet:This rank value is typically used in one of these ways in the SELECT statement:

  • In der ORDER BY-Klausel, um die Zeilen, die in der Rangfolge oben liegen, als erste Zeilen der Tabelle zurückzugeben.In the ORDER BY clause to return the highest-ranking rows as the first rows in the table.

  • In der Auswahlliste, um den zugeordneten Rangfolgenwert jeder Zeile anzuzeigen.In the select list to see the rank value assigned to each row.

BerechtigungenPermissions

Ausführungsberechtigungen sind nur für Benutzer mit den entsprechenden SELECT-Privilegien für die Tabelle oder die referenzierten Tabellenspalten verfügbar.Execute permissions are available only by users with the appropriate SELECT privileges on the table or the referenced table's columns.

BeispieleExamples

A.A. Einfaches BeispielSimple Example

Im folgende Beispiel erstellt und füllt eine Tabelle zwei Spalten mit 3 Landkreise und Farben in ihren Flags.The following example creates and populates a simple table of two columns, listing 3 counties and the colors in their flags. It erstellt und füllt einen Volltextkatalog und Index für die Tabelle.The it creates and populates a full-text catalog and index on the table. Die CONTAINSTABLE wird die Syntax veranschaulicht.Then the CONTAINSTABLE syntax is demonstrated. In diesem Beispiel wird veranschaulicht, wie der Rangwert höher wächst, wenn der gesuchte Wert mehrmals erfüllt ist.This example demonstrates how the rank value grows higher when the search value is met multiple times. In der letzten Abfrage hat Tansania, die sowohl "Grün" und "Schwarz enthält einen höheren Rang als Italien, die nur eine der abgefragten Farben enthalten.In the last query, Tanzania which contains both green and black has a higher rank than Italy which contain only one of the queried colors.

CREATE TABLE Flags (Country nvarchar(30) NOT NULL, FlagColors varchar(200));  
CREATE UNIQUE CLUSTERED INDEX FlagKey ON Flags(Country);  
INSERT Flags VALUES ('France', 'Blue and White and Red');  
INSERT Flags VALUES ('Italy', 'Green and White and Red');  
INSERT Flags VALUES ('Tanzania', 'Green and Yellow and Black and Yellow and Blue');  
SELECT * FROM Flags;  
GO  
  
CREATE FULLTEXT CATALOG TestFTCat;  
CREATE FULLTEXT INDEX ON Flags(FlagColors) KEY INDEX FlagKey ON TestFTCat;  
GO   
  
SELECT * FROM Flags;  
SELECT * FROM CONTAINSTABLE (Flags, FlagColors, 'Green') ORDER BY RANK DESC;  
SELECT * FROM CONTAINSTABLE (Flags, FlagColors, 'Green or Black') ORDER BY RANK DESC;  

B.B. Zurückgeben von RangwertenReturning rank values

Im folgenden Beispiel wird nach allen Produktnamen gesucht, die die Wörter "frame", "whell" oder "tire" enthalten, wobei jedes Wort anders gewichtet wird.The following example searches for all product names containing the words "frame," "wheel," or "tire," and different weights are given to each word. Für jede zurückgegebene Zeile, die diese Suchkriterien entsprechen wird die relative Nähe (rangfolgenbewertung) der Übereinstimmung angezeigt.For each returned row matching these search criteria, the relative closeness (ranking value) of the match is shown. Darüber hinaus werden die Zeilen, die die höchste Einstufung erhielten, als Erstes zurückgegeben.In addition, the highest ranking rows are returned first.

USE AdventureWorks2012;  
GO  
  
SELECT FT_TBL.Name, KEY_TBL.RANK  
    FROM Production.Product AS FT_TBL   
        INNER JOIN CONTAINSTABLE(Production.Product, Name,   
        'ISABOUT (frame WEIGHT (.8),   
        wheel WEIGHT (.4), tire WEIGHT (.2) )' ) AS KEY_TBL  
            ON FT_TBL.ProductID = KEY_TBL.[KEY]  
ORDER BY KEY_TBL.RANK DESC;  
GO  

C.C. Zurückgeben von Rangwerten, die größer sind als ein angegebener WertReturning rank values greater than a specified value

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 bracket-Tabelle mit NEAR nach "reflector" in der Nähe von "Production.Document" gesucht.The following example uses NEAR to search for "bracket" and "reflector" close to each other in the Production.Document table. Es werden nur Zeilen mit einem Rangwert von mindestens 50 zurückgegeben.Only rows with a rank value of 50 or higher are returned.

USE AdventureWorks2012  
GO  
  
SELECT DocumentNode, Title, DocumentSummary  
FROM Production.Document AS DocTable   
INNER JOIN CONTAINSTABLE(Production.Document, Document,  
  'NEAR(bracket, reflector)' ) AS KEY_TBL  
  ON DocTable.DocumentNode = KEY_TBL.[KEY]  
WHERE KEY_TBL.RANK > 50  
ORDER BY KEY_TBL.RANK DESC;  
GO  

Hinweis

Wenn eine Volltextabfrage keine ganze Zahl als maximalen Abstand angibt, entspricht ein Dokument, das nur Treffer enthält, deren Abstand größer als 100 logische Begriffe ist, die NEAR-Anforderungen nicht, und der Rang ist 0.If a full-text query does not specify an integer as the maximum distance, a document that contains only hits whose gap is greater than 100 logical terms will not meet the NEAR requirements, and its ranking will be 0.

D.D. Zurückgeben der obersten 5 Ergebnisse mithilfe von top_n_by_rankReturning top 5 ranked results using top_n_by_rank

Im folgenden Beispiel wird die Beschreibung der ersten 5 Produkte zurückgegeben, bei denen die Description-Spalte das Wort "aluminium" in der Nähe des Worts "light" oder "lightweight" enthält.The following example returns the description of the top 5 products where the Description column contains the word "aluminum" near either the word "light" or the word "lightweight".

USE AdventureWorks2012;  
GO  
  
SELECT FT_TBL.ProductDescriptionID,  
   FT_TBL.Description,   
   KEY_TBL.RANK  
FROM Production.ProductDescription AS FT_TBL INNER JOIN  
   CONTAINSTABLE (Production.ProductDescription,  
      Description,   
      '(light NEAR aluminum) OR  
      (lightweight NEAR aluminum)',  
      5  
   ) AS KEY_TBL  
   ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY];  
GO  

GO

E.E. Angeben des LANGUAGE-ArgumentsSpecifying the LANGUAGE argument

Im folgenden Beispiel wird die Verwendung des LANGUAGE-Arguments dargestellt.The following example shows using the LANGUAGE argument.

USE AdventureWorks2012;  
GO  
  
SELECT FT_TBL.ProductDescriptionID,  
   FT_TBL.Description,   
   KEY_TBL.RANK  
FROM Production.ProductDescription AS FT_TBL INNER JOIN  
   CONTAINSTABLE (Production.ProductDescription,  
      Description,   
      '(light NEAR aluminum) OR  
      (lightweight NEAR aluminum)',  
      LANGUAGE N'English',  
      5  
   ) AS KEY_TBL  
   ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY];  
GO  

Hinweis

Die Sprache Language_term Argumentis nicht erforderlich, für die Verwendung von Top_n_by_rank.The LANGUAGE language_term argumentis not required for using top_n_by_rank.

Siehe auchSee Also

Einschränken von Suchergebnissen mit RANK Limit Search Results with RANK
Abfragen mit Volltextsuche Query with Full-Text Search
Erstellen von Volltextsuchabfragen (Visual Database Tools) Create Full-Text Search Queries (Visual Database Tools)
CONTAINS (Transact-SQL) CONTAINS (Transact-SQL)
Abfragen mit Volltextsuche Query with Full-Text Search
SELECT (Transact-SQL) SELECT (Transact-SQL)
FROM (Transact-SQL)FROM (Transact-SQL)