Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Zwraca tabelę zero, jeden lub więcej wierszy dla tych kolumn zawierających dokładne lub rozmyte (mniej precyzyjne) dopasowania do pojedynczych wyrazów i fraz, bliskość wyrazów w określonej odległości od siebie lub dopasowania ważone.
CONTAINSTABLE jest używana w klauzuli FROM instrukcji Transact-SQL SELECT i jest przywoływała tak, jakby była to zwykła nazwa tabeli. Wykonuje wyszukiwanie pełnotekstowe programu SQL Server w kolumnach indeksowanych pełnotekstowo zawierających typy danych oparte na znakach.
CONTAINSTABLE jest przydatny w przypadku tego samego rodzaju dopasowań, co contains i używa tych samych warunków wyszukiwania co CONTAINS.
W przeciwieństwie do CONTAINS, jednak zapytania używające CONTAINSTABLE zwracania wartości klasyfikacji istotności (RANK) i klucza pełnotekstowego (KEY) dla każdego wiersza. Aby uzyskać informacje na temat formularzy wyszukiwań pełnotekstowych obsługiwanych przez program SQL Server, zobacz Query with Full-Text Search.
Transact-SQL konwencje składni
Składnia
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 ]
)
Argumenty
tabeli
Nazwa tabeli, która została indeksowana pełnotekstowo. tabeli może być jedną, dwuczęściową lub czteroczęściową nazwą obiektu bazy danych. Podczas wykonywania zapytań dotyczących widoku może być zaangażowany tylko jedna tabela bazowa indeksowana pełnotekstowo.
Tabela nie może określić nazwy serwera i nie może być używana w zapytaniach względem serwerów połączonych.
column_name
Nazwa co najmniej jednej kolumny indeksowanej na potrzeby wyszukiwania pełnotekstowego. Kolumny mogą być typu
column_list
Wskazuje, że można określić kilka kolumn rozdzielonych przecinkami. column_list muszą być ujęte w nawiasy. Jeśli nie określono language_term, język wszystkich kolumn column_list musi być taki sam.
*
Określa, że wszystkie kolumny indeksowane pełnotekstowo w tabeli powinny być używane do wyszukiwania danego warunku wyszukiwania. Jeśli nie określono language_term, język wszystkich kolumn tabeli musi być taki sam.
LANGUAGE_TERM JĘZYKA
Język, którego zasoby są używane do usuwania wyrazów łamiące wyrazy, stemming i tezaurusa i wyrazów szumu (lub stopword) w ramach zapytania. Ten parametr jest opcjonalny i może być określony jako ciąg, liczba całkowita lub wartość szesnastkowa odpowiadająca identyfikatorowi ustawień regionalnych (LCID) języka. Jeśli language_term jest określony, język, który reprezentuje, jest stosowany do wszystkich elementów warunku wyszukiwania. Jeśli nie określono żadnej wartości, używany jest język pełnotekstowy kolumny.
Jeśli dokumenty różnych języków są przechowywane razem jako binarne duże obiekty (BLOB) w jednej kolumnie, identyfikator ustawień regionalnych (LCID) danego dokumentu określa język używany do indeksowania zawartości. Podczas wykonywania zapytań dotyczących takiej kolumny określ LANGUAGE <language_term> , aby zwiększyć prawdopodobieństwo dobrego dopasowania.
Po określeniu jako ciągu language_term odpowiada alias wartości kolumny w widoku zgodności sys.syslanguages . Ciąg musi być ujęta w pojedynczy cudzysłów, tak jak w ciągu "language_term". Po określeniu jako liczba całkowita language_term jest rzeczywistym identyfikatorem LCID identyfikującym język. Po określeniu jako wartości szesnastkowej language_term jest 0x, a następnie wartość szesnastkowa LCID. Wartość szesnastkowa nie może przekraczać ośmiu cyfr, w tym zer wiodących.
Jeśli wartość jest w formacie zestawu znaków dwubajtowych (DBCS), program SQL Server konwertuje ją na Unicode.
Jeśli określony język jest nieprawidłowy lub nie ma zainstalowanych zasobów odpowiadających temu językowi, program SQL Server zwraca błąd. Aby użyć zasobów języka neutralnego, określ 0x0 jako language_term.
top_n_by_rank
Określa, że zwracane są tylko n najwyżej sklasyfikowanych dopasowań w kolejności malejącej. Ma zastosowanie tylko wtedy, gdy określono wartość całkowitą n. Jeśli top_n_by_rank jest połączona z innymi parametrami, zapytanie może zwrócić mniej wierszy niż liczba wierszy, które faktycznie pasują do wszystkich predykatów. top_n_by_rank pozwala zwiększyć wydajność zapytań, przypominając tylko najbardziej istotne trafienia.
<contains_search_condition>
Określa tekst do wyszukania w column_name i warunki dopasowania. Aby uzyskać informacje na temat warunków wyszukiwania, zobacz ZAWIERA.
Uwagi
Predykaty i funkcje pełnotekstowe działają na pojedynczej tabeli, co jest implikowane w FROM predykacie. Aby wyszukać wiele tabel, użyj tabeli sprzężonej w FROM klauzuli , aby wyszukać zestaw wyników, który jest produktem co najmniej dwóch tabel.
Zwrócona tabela zawiera kolumnę o nazwie KEY zawierającą wartości klucza pełnotekstowego. Każda tabela indeksowana pełnotekstowo zawiera kolumnę, której wartości są gwarantowane jako unikatowe, a wartości zwracane w KEY kolumnie są wartościami klucza pełnotekstowego wierszy, które spełniają kryteria wyboru określone w warunku wyszukiwania. Właściwość TableFulltextKeyColumn uzyskana z OBJECTPROPERTYEX funkcji zapewnia tożsamość tej unikatowej kolumny klucza. Aby uzyskać identyfikator kolumny skojarzonej z kluczem pełnotekstowym indeksu pełnotekstowego, użyj funkcji sys.fulltext_indexes Aby uzyskać więcej informacji, zobacz sys.fulltext_indexes.
Aby uzyskać wiersze z oryginalnej tabeli, określ sprzężenie z wierszami CONTAINSTABLE . Typową formą klauzuli FROM dla instrukcji using SELECT jest:CONTAINSTABLE
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];
Tabela utworzona przez program CONTAINSTABLE zawiera kolumnę o nazwie RANK. Kolumna RANK jest wartością (od 0 do 1000) dla każdego wiersza wskazującą, jak dobrze wiersz pasuje do kryteriów wyboru. Ta wartość rangi jest zwykle używana na jeden z następujących sposobów w instrukcji SELECT :
W klauzuli
ORDER BY, aby zwrócić wiersze o najwyższej klasyfikacji jako pierwsze wiersze w tabeli.Na liście wybierz, aby wyświetlić wartość rangi przypisanej do każdego wiersza.
Uprawnienia
Uprawnienia wykonywania są dostępne tylko dla użytkowników z odpowiednimi SELECT uprawnieniami w tabeli lub kolumnach tabeli, do których się odwołujesz.
Przykłady
Odp. Przykład podstawowy
Poniższy przykład tworzy i wypełnia prostą tabelę dwóch kolumn, wyświetlając listę trzech krajów/regionów i kolory w flagach. Tworzy i wypełnia wykaz pełnotekstowy i indeks w tabeli. Następnie przedstawiono składnię CONTAINSTABLE . W tym przykładzie pokazano, jak wartość rangi rośnie wyższa, gdy wartość wyszukiwania jest wielokrotnie osiągana. W ostatnim zapytaniu Tanzania, która zawiera zarówno zieloną, jak i czarną, ma wyższą rangę niż Włochy, która zawiera tylko jeden z zapytanych kolorów.
CREATE TABLE Flags
(
CountryOrRegion NVARCHAR (30) NOT NULL,
FlagColors VARCHAR (200)
);
CREATE UNIQUE CLUSTERED INDEX FlagKey ON Flags(CountryOrRegion);
INSERT INTO Flags VALUES ('France', 'Blue and White and Red');
INSERT INTO Flags VALUES ('Italy', 'Green and White and Red');
INSERT INTO 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. Zwracanie wartości rangi
Poniższy przykład wyszukuje wszystkie nazwy produktów zawierające wyrazy frame, wheellub tirei różne wagi dla każdego słowa. Dla każdego zwracanego wiersza zgodnego z tymi kryteriami wyszukiwania wyświetlana jest względna bliskość (wartość klasyfikacji) dopasowania. Ponadto zwracane są najpierw najwyższe wiersze klasyfikacji.
USE AdventureWorks2022;
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. Zwracanie wartości rangi większej niż określona wartość
Dotyczy: SQL Server 2012 (11.x) i nowsze wersje.
W poniższym przykładzie użyto funkcji NEAR, aby wyszukać bracket i reflector zamknąć siebie nawzajem w Production.Document tabeli. Zwracane są tylko wiersze o wartości rangi 50 lub wyższej.
USE AdventureWorks2022;
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
Nuta
Jeśli zapytanie pełnotekstowe nie określa liczby całkowitej jako maksymalnej odległości, dokument zawierający tylko trafienia, którego różnica jest większa niż 100 terminów logicznych, nie spełnia NEAR wymagań, a jego klasyfikacja wynosi 0.
D. Zwracanie pięciu najlepszych sklasyfikowanych wyników przy użyciu top_n_by_rank
Poniższy przykład zwraca opis pięciu pierwszych produktów, w których kolumna Description zawiera słowo aluminum w pobliżu słowa light lub słowa lightweight.
USE AdventureWorks2022;
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
E. Określanie argumentu LANGUAGE
W poniższym przykładzie pokazano użycie argumentu LANGUAGE.
USE AdventureWorks2022;
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
Nuta
Argument LANGUAGE language_term nie jest wymagany do używania top_n_by_rank.