FREETEXTTABLE (Transact-SQL)
Gibt eine Tabelle mit keiner Zeile, einer Zeile oder mehreren Zeilen für alle Spalten mit zeichenbasierten Datentypen zurück, deren Werte mit der Bedeutung, jedoch nicht mit dem genauen Wortlaut des Texts im angegebenen freetext_string übereinstimmen. Auf FREETEXTTABLE kann nur in der FROM-Klausel einer SELECT-Anweisung wie auf einen regulären Tabellennamen verwiesen werden.
Abfragen, die FREETEXTTABLE verwenden, sind FREETEXT-Volltextabfragen, die für jede Zeile einen Relevanzrangfolgenwert (Relevance Ranking Value – RANK) und einen Volltextschlüssel (KEY) zurückgeben.
Syntax
FREETEXTTABLE (table , { column_name | (column_list) | * }
, 'freetext_string'
[ , LANGUAGE language_term ]
[ , top_n_by_rank ] )
Argumente
table
Der Name der Tabelle, die für die Volltextabfrage gekennzeichnet wurde. table oder viewkann ein ein-, zwei-, oder dreiteiliger Name eines Datenbankobjekts sein. Bei der Abfrage einer Sicht kann nur eine volltextindizierte Basistabelle verwendet werden.table kann keinen Servernamen angeben und kann nicht für Abfragen auf Verbindungsservern verwendet werden.
column_name
Der Name einer oder mehrerer volltextindizierten Spalten der in der FROM-Klausel angegebenen Tabelle. Die Spalten können vom Datentyp char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary oder varbinary(max) sein.column_list
Gibt an, dass verschiedene durch Kommas getrennte Spalten festgelegt werden können. column_list muss in Klammern eingeschlossen werden. Sofern language_term nicht angegeben ist, muss die Sprache aller Spalten von column_list identisch sein.*
Gibt an, dass alle für die Volltextsuche registrierten Spalten nach dem angegebenen freetext_string-Wert durchsucht werden. Wenn language_term nicht angegeben ist, muss die Sprache aller volltextindizierten Spalten in der Tabelle identisch sein.freetext_string
Der Text, nach dem in column_name gesucht werden soll. Es kann hierbei ein beliebiger Text aus Wörtern, Ausdrücken und Sätzen eingegeben werden. Übereinstimmungen werden dann generiert, wenn ein Begriff oder Formen eines Begriffs im Volltextindex gefunden werden.Im Gegensatz zur CONTAINS-Suchbedingung, in der AND ein Schlüsselwort ist, wird das Wort 'and' in freetext_string als Füllwort oder als Stoppworteingestuft und verworfen.
Die Verwendung von WEIGHT, FORMSOF, Platzhaltern, NEAR und sonstiger Syntax ist nicht zulässig. Für freetext_string werden die Wörtertrennung und die Wortstammerkennung ausgeführt sowie der Thesaurus angewendet. Wenn freetext_string in doppelten Anführungszeichen eingeschlossen ist, wird nach der Übereinstimmung eines Ausdrucks gesucht; die Wortstammerkennung wird nicht ausgeführt und der Thesaurus wird nicht angewendet.
LANGUAGE language_term
Die Sprache, deren Ressourcen für die Wörtertrennung, die Wortstammerkennung und den Thesaurus sowie die Entfernung von Stoppwörtern in der Abfrage verwendet werden. Dieser Parameter ist optional und kann als Zeichenfolge, ganze Zahl oder Hexadezimalwert entsprechend dem Gebietsschemabezeichner (Locale Identifier – LCID) einer Sprache angegeben werden. Wird language_term angegeben, wird die entsprechende Sprache auf alle Elemente der Suchbedingung angewendet. Wird kein Wert angegeben, wird die Volltextsprache der Spalte verwendet.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. Beim Abfragen einer solchen Spalte kann die Angabe von LANGUAGElanguage_term die Wahrscheinlichkeit einer hohen Übereinstimmung erhöhen.
Wenn language_term als Zeichenfolge angegeben wird, entspricht diese dem Wert der alias-Spalte in der sys.syslanguages (Transact-SQL)-Kompatibilitätssicht. Die Zeichenfolge muss in einfache Anführungszeichen eingeschlossen werden, z. B. 'language_term'. In Form einer ganzen Zahl ist language_term der eigentliche Gebietsschemabezeichner, der die Sprache identifiziert. In Form eines Hexadezimalwerts ist language_term gleich 0x, gefolgt vom Hexadezimalwert des Gebietsschemabezeichners. Der Hexadezimalwert darf acht Ziffern nicht überschreiten, einschließlich führender Nullen.
Wird der Wert im Format Doppelbyte-Zeichensatz (Double-Byte Character Set, DBCS) angegeben, wird er von MicrosoftSQL Server in Unicode konvertiert.
Ist die angegebene Sprache ungültig oder sind keine Ressourcen installiert, die dieser Sprache entsprechen, gibt SQL Server einen Fehler zurück. Geben Sie 0x0 als language_term an, um neutrale Sprachressourcen zu verwenden.
top_n_by_rank
Gibt an, dass nur die n höchsten Übereinstimmungen in absteigender Reihenfolge zurückgegeben werden. Wird nur angewendet, wenn ein ganzzahliger Wert n angegeben ist. 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. top_n_by_rank ermöglicht die Steigerung der Abfrageleistung, indem nur die relevantesten Treffer erneut abgerufen werden.
Hinweise
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 zwei oder mehr Tabellen erstellt wird.
FREETEXTTABLE verwendet die gleichen Suchbedingungen wie das FREETEXT-Prädikat.
Wie bei CONTAINSTABLE enthält die zurückgegebene Tabelle die Spalten KEY und RANK, auf die innerhalb der Abfrage verwiesen wird, um die entsprechenden Zeilen abzurufen und die Rangfolgenwerte zu verwenden.
FREETEXTTABLE wird nicht als Schlüsselwort erkannt, wenn der Kompatibilitätsgrad kleiner als 70 ist. Weitere Informationen finden Sie unter sp_dbcmptlevel (Transact-SQL).
Berechtigungen
FREETEXTTABLE kann nur von Benutzern aufgerufen werden, die entsprechende SELECT-Privilegien für die angegebene Tabelle oder die Spalten der Tabelle besitzen, auf die verwiesen wird.
Beispiele
Im folgenden Beispiel werden der Kategoriename und die Beschreibung aller Kategorien zurückgegeben, die sich auf sweet, candy, bread, dry oder meat beziehen.
Hinweis |
---|
Zum Ausführen dieses Beispiels muss die Northwind-Datenbank installiert werden. Informationen zum Installieren der Northwind-Datenbank finden Sie unter Herunterladen der Beispieldatenbanken Northwind und pubs. |
USE Northwind;
SELECT FT_TBL.CategoryName
,FT_TBL.Description
,KEY_TBL.RANK
FROM dbo.Categories AS FT_TBL
INNER JOIN FREETEXTTABLE(dbo.Categories, Description,
'sweetest candy bread and dry meat') AS KEY_TBL
ON FT_TBL.CategoryID = KEY_TBL.[KEY];
GO
Im Folgenden Beispiel wird die Verwendung der Parameter LANGUAGElanguage_term und top_n_by_rank dargestellt.
USE Northwind;
SELECT FT_TBL.CategoryName
,FT_TBL.Description
,KEY_TBL.RANK
FROM dbo.Categories AS FT_TBL
INNER JOIN FREETEXTTABLE(dbo.Categories, Description,
'sweetest candy bread and dry meat',LANGUAGE 'English',2)
AS KEY_TBL
ON FT_TBL.CategoryID = KEY_TBL.[KEY];
GO
Hinweis |
---|
Der LANGUAGE ///language_term -Parameter ist für die Verwendung des top_n_by_rank -Parameters nicht erforderlich. |
Siehe auch