Dieser Artikel wurde manuell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. |
Übersetzung
Original
|
CONTAINSTABLE (Transact-SQL)
Gibt eine Tabelle mit keiner, einer oder mehreren Zeilen für jene Spalten zurück, die präzise oder weniger präzise (fuzzy) Übereinstimmungen mit einzelnen Wörtern bzw. Ausdrücken aufweisen, die den Abstand von Wörtern oder gewichtete Treffer enthalten. CONTAINSTABLE wird in der FROM-Klausel einer Transact-SQL-SELECT-Anweisung verwendet und es wird analog zu einem regulären Tabellennamen darauf verwiesen. Es wird eine SQL Server-Volltextsuche für volltextindizierten Spalten mit zeichenbasierten Datentypen durchgeführt.
CONTAINSTABLE ist für dieselben Arten von Übereinstimmungen geeignet wie das CONTAINS-Prädikat und verwendet die gleichen Suchbedingungen wie 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.
Hinweis
|
|---|
|
Informationen zu den Formen der Volltextsuche, die von SQL Server unterstützt werden, finden Sie unter Abfragen mit Volltextsuche. |
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 ]
)
Volltextprädikate und -funktionen gelten für eine einzelne Tabelle, die im FROM-Prädikat enthalten ist. 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.
Die zurückgegebene Tabelle besitzt eine Spalte namens KEY, die Volltextschlüsselwerte enthält. Jede volltextindizierte Tabelle besitzt eine Spalte, deren Werte garantiert nur einmal vorkommen. Die Werte, die in der Spalte KEY zurückgegeben werden, sind die Volltextschlüsselwerte der Zeilen, die mit dem Auswahlkriterium übereinstimmen, das in der CONTAINS-Suchbedingung angegeben ist. Die TableFulltextKeyColumn-Eigenschaft, die mit der OBJECTPROPERTYEX-Funktion bestimmt werden kann, stellt die Identität für diese eindeutige Schlüsselspalte bereit. Verwenden Sie sys.fulltext_indexes, um die ID der Spalte abzurufen, die dem Volltextschlüssel des Volltextindexes zugeordnet ist. Weitere Informationen finden Sie unter sys.fulltext_indexes (Transact-SQL).
Geben Sie einen Join mit den CONTAINSTABLE-Zeilen an, um die gewünschten Zeilen der Originaltabelle zu erhalten. CONTAINSTABLE wird meist in folgender Form in der FROM-Klausel einer SELECT-Anweisung verwendet:
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 RANK. Die RANK-Spalte enthält für jede Zeile einen Wert (von 0 bis 1000), der angibt, wie gut eine Zeile mit dem Auswahlkriterium übereinstimmt. Dieser Rangwert wird in der SELECT-Anweisung üblicherweise auf folgende Weise verwendet:
In der ORDER BY-Klausel, um die Zeilen, die in der Rangfolge oben liegen, als erste Zeilen der Tabelle zurückzugeben.
In der Auswahlliste, um den zugeordneten Rangfolgenwert jeder Zeile anzuzeigen.
A.Zurückgeben von Rangwerten
Im folgenden Beispiel wird nach allen Produktnamen gesucht, die die Wörter "frame", "whell" oder "tire" enthalten, wobei jedes Wort anders gewichtet wird. Für jede zurückgegebene Zeile, die dieses Suchkriterium erfüllt, wird die relative Nähe (Rangfolgenbewertung) der Übereinstimmung angezeigt. Darüber hinaus werden die Zeilen, die die höchste Einstufung erhielten, als Erstes zurückgegeben.
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
B.Zurückgeben von Rangwerten, die größer sind als ein angegebener Wert
Im folgenden Beispiel wird in der Production.Document-Spalte der AdventureWorks2008-Datenbank mit NEAR nach "bracket" in der Nähe von "reflector" gesucht. Ausschließlich Zeilen mit einem Rangwert von mindestens 50 werden zurückgegeben.
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. |
C.Zurückgeben der obersten 5 Ergebnisse mithilfe von 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.
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
D.Angeben des LANGUAGE-Arguments
Im folgenden Beispiel wird die Verwendung des LANGUAGE-Arguments dargestellt.
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 |
|---|
Das LANGUAGE-language_term Argument ist nicht erforderlich für die Verwendung von top_n_by_rank. |


Hinweis