CONTAINSTABLE (Transact-sql)
Sıfır, bir ya da daha fazla satır kesin ya da bulanık (daha az hassas) maçları tek kelime ve deyimleri, kelimeleri belirli bir mesafede birbirlerine yakınlığı ya da ağırlıklı eşleşmeleri içeren bu sütunlar için bir tablo döndürür. CONTAINSTABLE içinde kullanılan from yan , a Transact-SQLseçme deyimi ve düzenli tablo adı sanki başvurulmaktadır. .Bu bir SQL Servertam metin üzerinde tam metin arama dizin karakter tabanlı veri türleri içeren sütunlar.
CONTAINSTABLE eşleşme olarak aynı tür yararlı CONTAINS ve aynı arama koşullarını içerir kullanır.
İÇERİR, ancak değeri (rank) ve her satır için tam metin anahtarını (key) derecelendirme uygunluğu CONTAINSTABLE kullanarak sorguları döndürür.
[!NOT]
Tam metin arama tarafından desteklenen biçimleri hakkında bilgi için SQL Serverbakın Tam metin arama sorgusuyla.
Transact-SQL Sözdizim Kuralları
Sözdizimi
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 ]
)
Bağımsız değişkenler
table
Tam metin bir tablo adı dizin oluşturulur. tablebir bir, iki, üç veya dört veritabanı nesnesi adı olabilir. Görünüm sorgularken, tek bir tam metin dizinlenmiş temel tablo dahil.tablebir sunucu adı belirtemezsiniz ve bağlantılı sunucuları sorgular kullanılamaz.
column_name
Tam metin dizini bir veya daha fazla sütun adı arıyor. The columns can be of type char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary, or varbinary(max).column_list
Bir virgülle ayrılmış birden fazla sütun belirtilen gösterir. column_listayraç içine alınmalıdır. Sürece language_termbelirtilen tüm sütunları dili column_listaynı olmalıdır.*
Tüm tam metin sütunları dizine belirtir table için arama koşulu Aranacak kullanılmalıdır. Sürece language_termbelirtilirse, tüm sütunlar tablonun dili aynı olması gerekir.DİLlanguage_term
Olan kaynakları sözcük bölme, Doğan, eş anlamlılar ve etkisiz sözcük için kullanılacak dil (ya da stopword) kaldırma sorgu bir parçası olarak. Bu parametre isteğe bağlıdır ve bir dize, tamsayı veya onaltılık değeri, bir dil yerel ayar tanıtıcısını (LCID) karşılık belirtilebilir. Eğer language_termbelirtilirse, temsil ettiği dil arama koşulu öğelerin tümüne uygulanır. Herhangi bir değer belirtilirse, sütun tam metin dili kullanılır.Farklı dillerde belgeler olarak büyük ikili nesneler (BLOB'lar) tek bir sütunda birlikte depolanıyorsa, verilen belgenin yerel ayar tanıtıcısını (LCID) içeriği dizine eklemek hangi dilde kullanılacağını belirler. Böyle bir sütun sorgularken belirterek LANGUAGE language_termiyi bir eşleşme olasılığını artırabilir.
Bir dizge olarak belirtilen language_termkarşılık ad sütun değeri sys.syslanguages Uyumluluk Görünümü. Dize gibi tek tırnak işareti içine alınmalıdır 'language_term'. Bir tamsayı olarak belirtildiğinde language_termdilini tanımlayan gerçek LCID '. Onaltılı değer olarak belirtildiğinde language_term0 x LCID onaltılık değerini izliyor. Onaltılık değeri, sekiz basamak, öndeki dahil aşmamalıdır.
Değer ise çift baytlı karakter kümesi (dbcs) biçimi, Microsoft SQL ServerUnicode'a dönüştürür.
Belirtilen dil veya orada geçerli değilse kaynak yok bu dile karşılık gelen yüklü SQL Serverhata veriyor. Nötr dil kaynakları kullanmak için 0x0 olarak belirtmeniz language_term.
top_n_by_rank
Sadece belirtir nAzalan, en yüksek sırada eşleşmeler döndürülür. Yalnızca bir tamsayı değeri, geçerli n, belirtilen. Eğer top_n_by_rankbirleştirilir diğer parametrelerle sorgu, aslında tüm yüklemler eşleşen satır sayısından daha az satır geri dönebilirler. top_n_by_rankyalnızca en alakalı hits hatırlatarak tarafından sorgu performansını artırmak sağlar.<contains_search_condition>
İçinde aranacak metni belirtir column_nameve bir eşleşme koşulları. Arama koşulları hakkında daha fazla bilgi için bkz: (Transact-sql) içerir.
Açıklamalar
Tam metin doğrulamaları ve çalışma from yüklemi örtülü tek bir tabloda fonksiyonları. Birden fazla tabloyu temel arama yapmak için iki veya daha fazla tablodan bir ürün bir sonuç kümesi üzerinde aramak için from yan tümcesinde birleştirilen tablo kullanın.
Döndürülen tablo adında bir sütunu olan key tam metin anahtar değerleri içerir. Her tam metin dizini oluşturulmuş tablo değerleri garantili benzersiz olması için bir sütun ve döndürülen değerler olan key sütun belirtilen seçim ölçütü ile eşleşen bir satır tam metin anahtar değerleri olan arama koşulu içeren. TableFulltextKeyColumn özelliği, objectpropertyex işlevinden elde edilen bu benzersiz anahtar sütunu kimliğini sağlar. Tam metin dizini tam metin anahtar ile ilişkili sütun Kımlığı edinmek için içinsys.fulltext_indexesKatalog. Daha fazla bilgi için, bkz. içinsys.fulltext_indexesKatalog (Transact-sql).
İstediğiniz satırları özgün tablodan elde etmek için birleşim CONTAINSTABLE satırlarla belirtin. CONTAINSTABLE kullanarak bir select deyiminin from yan tipik şekli şöyledir:
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]
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]
CONTAINSTABLE tarafından üretilen tablo adlı bir sütun içeren SIRASI. SIRASI sütun her satır için bir satır seçim kriterleri ne kadar iyi eşleşti gösteren bir değeri (0-1000) olduğunu. Bu rütbe değeri genellikle bir select deyimi aşağıdaki şekillerde kullanılır:
Tablodaki ilk satır olarak en yüksek sıralamaya sahip satırları döndürmek için order by yan tümcesinde.
Her satıra atanan rütbe değerini görmek için listesi'ni seçin.
İzinler
Yürütme izinleri, yalnızca tablo veya başvurulan tablonun sütunları uygun select ayrıcalıklarına sahip kullanıcılar tarafından kullanılabilir.
Örnekler
A.Rank değerleri döndürme
Aşağıdaki örnek "çerçeve" sözcüklerini içeren tüm ürün adları için arama yapar. "tekerlek" ya da "lastiği" ve her sözcük için farklı ağırlık verilir. Bu arama ölçütüne uyan her döndürülen satır için (değer sıralamasında) göreli yakınlığı maçın gösterilir. Ayrıca, en yüksek sıralama satır ilk döndürülür.
USE AdventureWorks2012
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
USE AdventureWorks2012
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
B.Rank değerleri belirtilen bir değerden daha büyük döndürme
Aşağıdaki örnek yakın aramak için kullandığı "bracket'' ve "reflector'' birbirlerine yakın konumlara Production.Documentsütununda AdventureWorks2008veritabanı. Yalnızca satırları sıralama değeri 50 veya daha yüksek döndürülür.
USE AdventureWorks2012
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
USE AdventureWorks2012
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
[!NOT]
Tam metin sorgu olarak maksimum mesafe tamsayı atamazsa, yalnızca bulunmuş olan gap 100 mantıksal koşullarını büyük içeren bir belge çevre gereksinimlerini karşılamıyor ve sıralamasını 0 olacaktır.
C.Top_n_by_rank kullanarak en iyi 5 ranked sonuçları döndürülüyor
Aşağıdaki örnek en iyi 5 ürün açıklaması döndürür nerede Descriptionsütun "alüminyum" sözcüğünü içerir ya da kelime "ışık" ya da "basit" sözcüğü.
USE AdventureWorks2012
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
USE AdventureWorks2012
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
GO
D.Dil bağımsız değişkeni belirtme
Aşağıdaki örnek kullanarak LANGUAGEdeğişkeni.
USE AdventureWorks2012
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
USE AdventureWorks2012
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
[!NOT]
DİL language_term bağımsız değişkenikullanmak için zorunlu değildirtop_n_by_rank.
Ayrıca bkz.
Görevler
Tam metin arama sorguları (Visual Veritabanı Araçları) oluştur