Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
Egy nulla, egy vagy több sorból álló táblázatot ad vissza azon oszlopokhoz, amelyek pontos vagy homályos (kevésbé pontos) egyezést tartalmaznak egyetlen szóra és kifejezésre, a szavak egymástól meghatározott távolságon belüli közelségére vagy súlyozott egyezésekre.
CONTAINSTABLEegy Transact-SQL utasítás SELECT használatos, és úgy hivatkozik rá, mintha normál táblanév lenne. Teljes szöveges SQL Server-keresést végez a karakteralapú adattípusokat tartalmazó, teljes szöveges indexelt oszlopokon.
CONTAINSTABLE ugyanolyan típusú találatok esetén hasznos, mint a CONTAINS , és ugyanazokat a keresési feltételeket használja, mint CONTAINSa .
A lekérdezésekkel ellentétben CONTAINSazonban minden sorhoz egy relevancia-rangsorértéket (CONTAINSTABLE) és egy teljes szöveges kulcsot (RANK) ad KEY vissza. Az SQL Server által támogatott teljes szöveges keresések formájával kapcsolatos információkért lásd: Lekérdezés Full-Text Keresési.
Transact-SQL szintaxis konvenciói
Szintaxis
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 ]
)
Érvek
tábla
Egy teljes szöveges indexelt tábla neve. tábla lehet egy-, két-, három- vagy négyrészes adatbázis-objektum neve. Nézet lekérdezésekor csak egy teljes szöveges indexelt alaptáblát lehet bevonni.
a tábla nem tud kiszolgálónevet megadni, és nem használható a csatolt kiszolgálók lekérdezéseiben.
column_name
A teljes szöveges kereséshez indexelt egy vagy több oszlop neve. Az oszlopok lehetnek
column_list
Azt jelzi, hogy több, vesszővel elválasztott oszlop is megadható. column_list zárójelek közé kell tenni. Ha nincs megadva language_term, a column_list összes oszlopának nyelvének azonosnak kell lennie.
*
Megadja, hogy tábla összes teljes szöveges indexelt oszlopát kell használni az adott keresési feltétel kereséséhez. Ha nincs megadva language_term, a tábla összes oszlopának nyelvének azonosnak kell lennie.
NYELVI language_term
Az a nyelv, amelynek erőforrásait szótöréshez, szótöréshez, szinonimaszótárhoz és zajszavak (vagy stopword) eltávolításához használják a lekérdezés részeként. Ez a paraméter nem kötelező, és megadható egy nyelv területi azonosítójának (LCID) megfelelő sztringként, egész számként vagy hexadecimális értékként. Ha language_term van megadva, a rendszer az általa képviselt nyelvet alkalmazza a keresési feltétel minden elemére. Ha nincs megadva érték, a rendszer a teljes szövegű oszlop nyelvét használja.
Ha a különböző nyelvek dokumentumai bináris nagyméretű objektumokként (BLOB-k) vannak tárolva egyetlen oszlopban, az adott dokumentum területi azonosítója (LCID) határozza meg, hogy a rendszer milyen nyelvet használ a tartalom indexeléséhez. Ha ilyen oszlopot kérdez le, adja meg LANGUAGE <language_term> a jó egyezés valószínűségének növelését.
Ha sztringként van megadva, language_term a aliassys.syslanguages kompatibilitási nézet oszlopértékének felel meg. A sztringet idézőjelek közé kell foglalni, ahogyan a "language_term" kifejezésben is szerepel. Ha egész számként van megadva, language_term a nyelvet azonosító tényleges LCID. Ha hexadecimális értékként van megadva, a language_term 0x, majd az LCID hexadecimális értéke követi. A hexadecimális érték nem haladhatja meg a nyolc számjegyet, beleértve a kezdő nullákat is.
Ha az érték kétbájtos karakterkészlet (DBCS) formátumban van, az SQL Server Unicode-ra konvertálja.
Ha a megadott nyelv érvénytelen, vagy nincs olyan erőforrás telepítve, amely megfelel az adott nyelvnek, az SQL Server hibát ad vissza. A semleges nyelvi erőforrások használatához adja meg a 0x0 language_term.
top_n_by_rank
Azt adja meg, hogy a rendszer csak az n legmagasabb rangsorolt egyezéseket adja vissza csökkenő sorrendben. Csak akkor érvényes, ha egy egész szám (n) van megadva. Ha top_n_by_rank más paraméterekkel van kombinálva, a lekérdezés kevesebb sort ad vissza, mint az összes predikátumnak ténylegesen megfelelő sorok száma. top_n_by_rank lehetővé teszi a lekérdezési teljesítmény növelését, ha csak a legrelevánsabb találatokat hívja vissza.
<contains_search_condition>
Megadja az column_name keresendő szöveget és az egyezés feltételeit. A keresési feltételekről további információt a CONTAINS című témakörben talál.
Megjegyzések
A teljes szöveges predikátumok és függvények egyetlen táblán működnek, amely a FROM predikátumban is szerepel. Ha több táblában szeretne keresni, a záradékban egy összekapcsolt táblával FROM kereshet két vagy több tábla termékét tartalmazó eredményhalmazban.
A visszaadott táblázat egy teljes szöveges kulcsértékeket tartalmazó oszlopot KEY tartalmaz. Minden teljes szöveges indexelt táblázat tartalmaz egy oszlopot, amelynek értékei garantáltan egyediek, az oszlopban KEY visszaadott értékek pedig a keresési feltételben megadott kiválasztási feltételeknek megfelelő sorok teljes szöveges kulcsértékei. A TableFulltextKeyColumn függvényből OBJECTPROPERTYEX beszerzett tulajdonság biztosítja ennek az egyedi kulcsoszlopnak az identitását. A teljes szöveges index teljes szöveges kulcsához társított oszlop azonosítójának lekéréséhez használja sys.fulltext_indexes a sys.fulltext_indexes című témakört.
A kívánt sorok eredeti táblából való lekéréséhez adjon meg egy illesztőt a CONTAINSTABLE sorokkal. Az utasításhoz használt FROMSELECT záradék tipikus formája CONTAINSTABLE a következő:
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];
Az általa CONTAINSTABLE létrehozott tábla tartalmaz egy oszlopot.RANK Az RANK oszlop minden sorhoz egy érték (0 és 1000 között), amely azt jelzi, hogy egy sor mennyire felelt meg a kiválasztási feltételeknek. Ezt a rangértéket általában a következő módok egyikében használják az SELECT utasításban:
A záradékban a
ORDER BYlegmagasabb rangsorolású sorokat adja vissza a táblázat első soraként.A kiválasztási listában megtekintheti az egyes sorokhoz rendelt rangsorértéket.
Engedélyek
A végrehajtási engedélyek csak a SELECT megfelelő jogosultságokkal rendelkező felhasználók számára érhetők el a táblában vagy a hivatkozott tábla oszlopaiban.
Példák
Egy. Egyszerű példa
Az alábbi példa egy egyszerű, két oszlopból álló táblázatot hoz létre és tölt fel, amely három országot/régiót és a hozzájuk tartozó színeket sorolja fel. Létrehoz és feltölt egy teljes szöveges katalógust és indexet a táblán. Ezután a CONTAINSTABLE szintaxis be lesz mutatva. Ez a példa bemutatja, hogyan nő a rangsor értéke, ha a keresési érték többször is teljesül. Az utolsó lekérdezésben a zöldet és a feketét egyaránt tartalmazó Tanzánia magasabb rangot kapott, mint Olaszország, amely csak az egyik lekérdezett színt tartalmazza.
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. Rangsorértékek visszaadva
Az alábbi példa az összes olyan terméknevet keresi, amely tartalmazza a szavakat frame, wheelvagy tire, és különböző súlyokat ad az egyes szavaknak. A keresési feltételeknek megfelelő összes visszaadott sor esetében megjelenik az egyezés relatív közelsége (rangsorolási értéke). Emellett a legmagasabb rangsorolási sorok lesznek az elsők.
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. Egy megadott értéknél nagyobb rangértékeket ad vissza
A: SQL Server 2012 (11.x) és újabb verziókra vonatkozik.
Az alábbi példa a NEAR használatával keres bracket és reflector közel áll egymáshoz a Production.Document táblázatban. Csak az 50 vagy annál magasabb rangsorértékkel rendelkező sorok lesznek visszaadva.
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
Jegyzet
Ha egy teljes szöveges lekérdezés nem határoz meg egész számot a maximális távolságként, a csak olyan találatokat tartalmazó dokumentumok, amelyek 100-nál nagyobb logikai kifejezésnél nagyobb rést tartalmaznak, nem felelnek meg a NEAR követelményeknek, és rangsorolása 0.
D. Az első öt rangsorolt találatot adja vissza a top_n_by_rank
Az alábbi példa az első öt termék leírását adja vissza, ahol az Description oszlop a szó vagy a szó aluminumlightközelében lévő szót lightweight tartalmazza.
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. A LANGUAGE argumentum megadása
Az alábbi példa a LANGUAGE argumentum használatát mutatja be.
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
Jegyzet
A LANGUAGE language_term argumentum nem szükséges a top_n_by_rank használatához.