CONTAINSTABLE (Transact-SQL)
Zwraca tabela zero, jeden lub więcej wierszy dla tych kolumn zawierające typy danych znakowych na dokładne lub rozmyty (mniej dokładne) pasuje do pojedynczych wyrazów i fraz, bliskość wyrazy w pewnej odległości od siebie lub ważonej odpowiedników.CONTAINSTABLE można się odwoływać tylko w klauzula FROM instrukcja SELECT, tak jakby był on nazwę regularnych tabela .
Kwerend przy użyciu CONTAINSTABLE umożliwia określenie typu zawiera pełnego tekstu kwerend, które zwracają znaczenie dla klasyfikacji wartość (RANGA) i pełnego tekstu klucz (klucza) dla każdego wiersza.CONTAINSTABLE funkcja używa tych samych warunków wyszukiwania jako predykatu ZAWIERA.
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 >
| < 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 ] )
< proximity_term > ::=
{ < simple_term > | < prefix_term > }
{ { NEAR | ~ } { < simple_term > | < prefix_term > } } [ ...n ]
< weighted_term > ::=
ISABOUT
( { {
< simple_term >
| < prefix_term >
| < generation_term >
| < proximity_term >
}
[ WEIGHT ( weight_value ) ]
} [ ,...n ]
)
Argumenty
table
Czy nazwa została pełnotekstowe tabela jest indeksowane.tablemoże być jedno-, dwu-, trzy- lub nazwa obiektu czteroczęściowym bazy danych.Podczas badania widoku, mogą uczestniczyć tylko jednego pełnego tekstu indeksowanych tabela bazowa .tablenie można określić nazwa serwera i nie można używać w kwerendach przeciwko serwerów połączonych.
column_name
Trwa wyszukiwanie nazwy jedną lub więcej kolumn, które są indeksowane dla pełnego tekstu.The columns can be of type char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary, or varbinary(max).column_list
Wskazuje, można określić kilka kolumn, oddzielone przecinkiem.column_listmuszą być ujęte w nawiasy.Chyba że language_term jest określony język wszystkich kolumn column_list musi być taka sama.*
Określa, że wszystkie pełnotekstowego indeksowania kolumny w table powinna być używana do wyszukiwania określonego warunek wyszukiwania.Chyba że language_term określono język wszystkie kolumny tabela musi być taka sama.JĘZYKlanguage_term
To język, którego zasoby będą używane do dzielenia wyrazu, wynikające i tezaurus i wyraz pomijalny (lub stopword) jako część kwerendy do usuwania.Ten parametr jest opcjonalny i może być określony jako ciąg, liczba całkowita lub wartość szesnastkową odpowiadającą identyfikator ustawienia regionalne (LCID) języka.Jeśli language_term określono język reprezentuje zostaną zastosowane do wszystkich elementów warunek wyszukiwania.Jeśli nie określono wartości, używany jest język pełnego tekstu kolumna .Dokumenty w różnych językach są przechowywane razem jako dużych obiektów binarnych (bloków BLOB) w jednej kolumna, identyfikator ustawienia regionalne (LCID) danego dokumentu określa, jaki język jest używany do indeksowania zawartości.Podczas badania takiej kolumna, określając LANGUAGElanguage_term można zwiększyć prawdopodobieństwo dobre dopasowanie.
Gdy określona jako ciąg language_term odpowiada alias wartośćkolumna w sys.syslanguages widok zgodności. ciąg musi być ujęty w znaki pojedynczego cudzysłowu, tak jak w "language_term".Gdy określona jako liczba całkowita, language_term jest rzeczywisty identyfikator LCID identyfikujący język.Gdy określona jako wartość szesnastkową language_term x 0 następuje szesnastkowej wartości LCID.Wartość szesnastkowa nie może przekraczać ośmiu cyfr, łącznie z zerami na początku.
Jeśli wartość jest w formacie zestaw znaków dwubajtowych (zestaw znaków dwubajtowych), Microsoft SQL Server przekonwertuje go do kodu Unicode.
Jeśli język określony jest nieprawidłowa lub istnieje żadne zasoby zainstalowanych odpowiadające tym języku, SQL Server zwraca błąd.Aby korzystać z zasobów języków neutralnych, określić 0x0 jako language_term.
top_n_by_rank
Określa, że tylko nnajwyższy dopasowania środkowa, w kolejności malejącej, są zwracane.Stosuje się tylko wtedy, gdy wartość całkowitą, n, jest określona.Jeśli top_n_by_rank jest połączone z innymi parametrami, kwerenda może zwracać mniejszej liczby wierszy niż liczba wierszy, które rzeczywiście spełniają wszystkie predykatów.top_n_by_rankpozwala zwiększyć wydajność kwerendy PRZYWOŁUJĄC tylko najodpowiedniejsze trafień.<contains_search_condition>
Określa tekst do wyszukania w column_name i warunki dla dopasowania.Aby uzyskać informacje dotyczące warunków wyszukiwania, zobacz CONTAINS (Transact-SQL).
Uwagi
Pełny tekst predykaty i funkcje pracy na pojedynczej tabela, która jest wprost w predykacie od.Wyszukiwanie wielu tabel, należy użyć sprzężonej tabela w klauzula FROM wyszukiwania na zestaw wyników będącego produktem dwóch lub więcej tabel.
tabela zwrócone zawiera kolumna o nazwie klucz zawierający wartości pełnotekstowe klucz .Każda indeksowanych pełnotekstowe tabela zawiera kolumna , których wartości są gwarantowane unikatowa i wartości zwracane w klucz kolumna są wartości klucz pełnotekstowego opartego w wierszach spełniających kryteria określone w zawiera warunek wyszukiwania.TableFulltextKeyColumnwłaściwość, uzyskanych z OBJECTPROPERTYEX funkcjazapewnia tożsamość to unikatowy kluczkolumna. Aby uzyskać identyfikator kolumna skojarzonego z pełnego tekstu klucz indeksu pełnotekstowego, użyj sys.fulltext_indexes.Aby uzyskać więcej informacji, zobacz sys.fulltext_indexes (języka Transact-SQL).
Aby uzyskać żądane wiersze z tabelapierwotnej, należy określić łączyć z wierszy CONTAINSTABLE.Typowy formularz FROM klauzula SELECT instrukcja przy użyciu CONTAINSTABLE jest:
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 produkowanych przez CONTAINSTABLE zawiera kolumna o nazwie RANGA.RANGAkolumna jest wartość (od 0 do 1000) dla każdego wiersza, wskazujący, jak również wiersz spełnione kryteria wyboru. Wartość ta pozycja jest zwykle używana w jeden z następujących sposobów instrukcjaSELECT:
W kolejności klauzula zwrócić najlepszych wierszy jako pierwszy wierszy w tabela.
Na liście wybranych do rangi wartość przypisana do każdego wiersza.
CONTAINSTABLE nie został rozpoznany jako słowo kluczowe, jeżeli poziom zgodności jest mniejsza niż 70.Aby uzyskać więcej informacji, zobacz sp_dbcmptlevel (języka Transact-SQL).
Uprawnienia
Wykonywanie uprawnień są dostępne tylko przez użytkowników z odpowiednimi uprawnieniami SELECT na tabela lub odwołanie kolumny do tabela.
Przykłady
A.Zwracanie wartości rangi przy użyciu CONTAINSTABLE
Następujący przykład wyszukuje wszystkie nazwy produktów zawierających słowa breads, ryby lub piwami i różne wskaźniki korygujące podane są do każdego wyrazu.Dla każdego wiersza zwracana spełniających te kryteria wyszukiwania względnego precyzja (Klasyfikacja wartość) dopasowania jest wyświetlany.Ponadto wierszy najwyższa klasyfikacja zwracane są najpierw.
USE Northwind;
GO
SELECT FT_TBL.CategoryName, FT_TBL.Description, KEY_TBL.RANK
FROM Categories AS FT_TBL
INNER JOIN CONTAINSTABLE(Categories, Description,
'ISABOUT (breads weight (.8),
fish weight (.4), beers weight (.2) )' ) AS KEY_TBL
ON FT_TBL.CategoryID = KEY_TBL.[KEY]
ORDER BY KEY_TBL.RANK DESC;
GO
B.Zwracanie wartości rangi większa niż wartość określona za pomocą CONTAINSTABLE
Poniższy przykład zwraca nazwę opis i kategorii wszystkie kategorie żywności, dla której Description kolumna zawiera wyrazy "sweet and savory" w pobliżu albo wyraz sauces lub słowo candies.Wszystkie wiersze, których nazwa kategorii Seafood są pomijane.Tylko wiersze z wartością rangi 2 lub wyższej są zwracane.
USE Northwind;
GO
SELECT FT_TBL.Description, FT_TBL.CategoryName, KEY_TBL.RANK
FROM Categories AS FT_TBL
INNER JOIN CONTAINSTABLE (Categories, Description,
'("sweet and savory" NEAR sauces) OR
("sweet and savory" NEAR candies)'
) AS KEY_TBL
ON FT_TBL.CategoryID = KEY_TBL.[KEY]
WHERE KEY_TBL.RANK > 2
AND FT_TBL.CategoryName <> 'Seafood'
ORDER BY KEY_TBL.RANK DESC;
GO
C.Zwracanie 10 pierwszych klasyfikację wyniki przy użyciu CONTAINSTABLE i top_n_by_rank
Poniższy przykład zwraca opis i kategoria Nazwa kategorii żywności 10 pierwszych gdzie Description kolumna zawiera wyrazy "słodkie i savory" blisko wyrazu "sosy" lub wyraz "candies".
USE Northwind;
SELECT FT_TBL.Description, FT_TBL.CategoryName , KEY_TBL.RANK
FROM Categories AS FT_TBL
INNER JOIN CONTAINSTABLE (Categories, Description,
'("sweet and savory" NEAR sauces) OR
("sweet and savory" NEAR candies)', 10)
AS KEY_TBL
ON FT_TBL.CategoryID = KEY_TBL.[KEY]
GO
D.Określając argument języka
W poniższym przykładzie za pomocą LANGUAGE argumentu.
USE Northwind;
SELECT FT_TBL.Description , FT_TBL.CategoryName , KEY_TBL.RANK
FROM dbo.Categories AS FT_TBL
INNER JOIN CONTAINSTABLE (dbo.Categories, Description,
'("sweet and savory" NEAR sauces) OR
("sweet and savory" NEAR candies)',LANGUAGE N'English', 10)
AS KEY_TBL
ON FT_TBL.CategoryID = KEY_TBL.[KEY];
Ostrzeżenie
JĘZYK language_term argumentunie jest wymagane do używania top_n_by_rank.
Zobacz także