Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
azure SQL Managed Instance
Vrátí tabulku s nulovou, jednou nebo více řádky pro tyto sloupce obsahující přesné nebo přibližné shody (méně přesné) s jedním slovem a frázemi, blízkosti slov v určité vzdálenosti od sebe nebo vážených shod.
CONTAINSTABLE se používá v klauzuli FROM příkazu Transact-SQL SELECT a odkazuje se, jako by se jednalo o běžný název tabulky. Provádí fulltextové vyhledávání SQL Serveru u fulltextových indexovaných sloupců obsahujících datové typy založené na znakech.
CONTAINSTABLE je užitečná pro stejné druhy shod jako funkce CONTAINS a používá stejné podmínky hledání jako CONTAINS.
Na rozdíl od CONTAINSvšak dotazy, které pro každý řádek používají CONTAINSTABLE hodnotu řazení podle relevance (RANK) a fulltextový klíč (KEY). Informace o formách fulltextového vyhledávání, které sql Server podporuje, najdete v tématu Query s Full-Text Search.
Syntaxe
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
tabulky
Název tabulky, která byla indexována fulltextem. tabulce může být název databázového objektu 1, dvou, tří nebo čtyřdílných. Při dotazování zobrazení může být zahrnuta pouze jedna fulltextová indexovaná základní tabulka.
Tabulka nemůže zadat název serveru a nedá se použít v dotazech na odkazované servery.
column_name
Název jednoho nebo více sloupců indexovaných pro fulltextové vyhledávání. Sloupce můžou být typu
column_list
Označuje, že je možné zadat několik sloupců oddělených čárkou. column_list musí být uzavřeny v závorkách. Pokud není zadán language_term, musí být jazyk všech sloupců column_list stejný.
*
Určuje, že všechny fulltextové indexované sloupce v tabulce by se měly použít k vyhledání dané podmínky hledání. Pokud není zadán language_term, musí být jazyk všech sloupců tabulky stejný.
LANGUAGE_TERM JAZYKA
Jazyk, jehož prostředky se v rámci dotazu používají k dělení slov, zmenšování a tesaurus a tesaurus (nebo stopword). Tento parametr je volitelný a lze jej zadat jako řetězec, celé číslo nebo šestnáctkovou hodnotu odpovídající identifikátoru národního prostředí (LCID) jazyka. Pokud je zadán language_term , jazyk, který představuje, se použije na všechny prvky podmínky hledání. Pokud není zadána žádná hodnota, použije se jazyk fulltextu sloupce.
Pokud jsou dokumenty různých jazyků uloženy společně jako binární velké objekty (BLOB) v jednom sloupci, identifikátor národního prostředí (LCID) daného dokumentu určuje, jaký jazyk se používá k indexování jeho obsahu. Při dotazu na takový sloupec určete LANGUAGE <language_term> , aby se zvýšila pravděpodobnost dobré shody.
Při zadání jako řetězec language_term odpovídá alias hodnotě sloupce v zobrazení kompatibility sys.syslanguages . Řetězec musí být uzavřený v jednoduchých uvozovkách, jako v "language_term". Pokud je zadáno jako celé číslo, language_term je skutečný identifikátor LCID, který identifikuje jazyk. Pokud je zadaná jako šestnáctková hodnota, language_term je 0x následovaná šestnáctkovou hodnotou LCID. Šestnáctková hodnota nesmí překročit osm číslic, včetně počátečních nul.
Pokud je hodnota ve formátu dvoubajtové znakové sady (DBCS), SQL Server ji převede na Unicode.
Pokud zadaný jazyk není platný nebo nejsou nainstalovány žádné prostředky odpovídající danému jazyku, sql Server vrátí chybu. Chcete-li použít neutrální jazykové prostředky, zadejte 0x0 jako language_term.
top_n_by_rank
Určuje, že se vrátí pouze n nejvyšších shod v sestupném pořadí. Platí pouze v případě, že je zadána celočíselná hodnota n. Pokud se top_n_by_rank zkombinuje s jinými parametry, dotaz by mohl vrátit méně řádků než počet řádků, které ve skutečnosti odpovídají všem predikátům. top_n_by_rank umožňuje zvýšit výkon dotazů tím, že si vzpomenete jenom na nejrelevavantnější přístupy.
<contains_search_condition>
Určuje text, který se má vyhledat v column_name a podmínky shody. Informace o podmínkách hledání naleznete v tématu CONTAINS.
Poznámky
Predikáty a funkce fulltextu pracují na jedné tabulce, která je odvozena v predikátu FROM . Pokud chcete vyhledat více tabulek, použijte ve své klauzuli propojenou tabulku a vyhledejte FROM sadu výsledků, která je součinem dvou nebo více tabulek.
Vrácená tabulka obsahuje sloupec KEY , který obsahuje hodnoty fulltextového klíče. Každá fulltextová indexovaná tabulka má sloupec, jehož hodnoty jsou zaručeny jedinečné, a hodnoty vrácené ve KEY sloupci jsou fulltextové klíčové hodnoty řádků, které odpovídají kritériím výběru zadaným v podmínce hledání. Vlastnost TableFulltextKeyColumn získaná OBJECTPROPERTYEX z funkce poskytuje identitu tohoto jedinečného sloupce klíče. Pokud chcete získat ID sloupce přidruženého k fulltextovém klíči fulltextového indexu, použijte sys.fulltext_indexes další informace v tématu sys.fulltext_indexes.
Chcete-li získat požadované řádky z původní tabulky, zadejte spojení s CONTAINSTABLE řádky. Typická forma FROM klauzule pro SELECT příkaz using CONTAINSTABLE je:
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];
Tabulka vytvořená pomocí CONTAINSTABLE obsahuje sloupec s názvem RANK. Sloupec RANK je hodnota (od 0 do 1000) pro každý řádek označující, jak dobře řádek odpovídal kritériím výběru. Tato hodnota pořadí se obvykle používá jedním z těchto způsobů v SELECT příkazu:
V klauzuli
ORDER BY, která vrátí řádky nejvyššího pořadí jako první řádky v tabulce.V seznamu pro výběr zobrazíte hodnotu pořadí přiřazenou každému řádku.
Dovolení
Oprávnění ke spuštění jsou k dispozici pouze uživatelé s příslušnými SELECT oprávněními v tabulce nebo sloupcích odkazované tabulky.
Příklady
A. Základní příklad
Následující příklad vytvoří a naplní jednoduchou tabulku dvou sloupců se seznamem tří zemí/oblastí a barev v jejich vlajkách. Vytvoří a naplní fulltextový katalog a index tabulky.
CONTAINSTABLE Pak se syntaxe demonstruje. Tento příklad ukazuje, jak se hodnota pořadí zvyšuje, když je hodnota hledání splněna vícekrát. V posledním dotazu má Tanzanie, která obsahuje zelenou i černou, vyšší pořadí než Itálie, která obsahuje pouze jednu z dotazovaných barev.
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. Vrácení hodnot pořadí
Následující příklad vyhledá všechny názvy produktů obsahující slova frame, wheelnebo tirea různé váhy jsou uvedeny pro každé slovo. Pro každý vrácený řádek odpovídající těmto kritériím hledání se zobrazí relativní blízkost (hodnota řazení) shody. Kromě toho se jako první vrátí nejvyšší řádky řazení.
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. Vrácení hodnot pořadí větších než zadaná hodnota
platí pro: SQL Server 2012 (11.x) a novější verze.
Následující příklad používá funkci NEAR k hledání bracket a reflector blízko sebe v Production.Document tabulce. Vrátí se pouze řádky s hodnotou pořadí 50 nebo vyšší.
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
Poznámka
Pokud fulltextový dotaz nezadá celé číslo jako maximální vzdálenost, dokument, který obsahuje pouze výsledky, jejichž mezera je větší než 100 logických termínů, nesplňuje NEAR požadavky a jeho pořadí je 0.
D. Vrácení prvních pěti seřazených výsledků pomocí top_n_by_rank
Následující příklad vrátí popis prvních pěti produktů, kde Description sloupec obsahuje slovo aluminum poblíž slova light nebo slova 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. Zadání argumentu LANGUAGE
Následující příklad ukazuje použití 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
Poznámka
Pro použití top_n_by_rank se nevyžaduje argument JAZYK language_term .
Související obsah
- Omezení výsledků hledání pomocí RANK
- dotaz pomocí hledání Full-Text
- vytváření vyhledávacích dotazů Full-Text (Visual Database Tools)
-
CONTAINS (Transact-SQL) -
SELECT (Transact-SQL) - Klauzule FROM plus JOIN, APPLY, PIVOT (Transact-SQL)