Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Bu sütunlar için kesin veya belirsiz (daha az kesin) eşleşmeler içeren sıfır, bir veya daha fazla satırdan oluşan bir tablo, tek sözcük ve tümceciklerle, sözcüklerin belirli bir mesafedeki yakınlığıyla veya ağırlıklı eşleşmelerle döndürür.
CONTAINSTABLEbir Transact-SQL deyiminin SELECT kullanılır ve normal bir tablo adıymış gibi başvurulur. Karakter tabanlı veri türleri içeren tam metin dizinli sütunlarda SQL Server tam metin araması gerçekleştirir.
CONTAINSTABLE
, CONTAINS ile aynı tür eşleşmeler için kullanışlıdır ve ile aynı arama koşullarını CONTAINSkullanır.
Öte yandan CONTAINS, kullanan CONTAINSTABLE sorgular, her satır için bir ilgi derecelendirme değeri (RANK) ve tam metin anahtarı (KEY) döndürür. SQL Server tarafından desteklenen tam metin arama biçimleri hakkında bilgi için bkz. Full-Text Aramaile sorgu
Transact-SQL söz dizimi 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şken
tablo
Tam metin dizini oluşturulmuş bir tablonun adı. tablo bir, iki, üç veya dört bölümden oluşabilir. Bir görünümü sorguladığınızda, yalnızca bir tam metin dizinli temel tablo dahil edilebilir.
tablosu sunucu adı belirtemez ve bağlı sunuculara yönelik sorgularda kullanılamaz.
column_name
Tam metin araması için dizine alınan bir veya daha fazla sütunun adı. Sütunlar char, varchar, nchar, nvarchar, metintüründe olabilir . ntext, resim, xml, varbinaryveya varbinary(max).
column_list
Virgülle ayrılmış birkaç sütunun belirtilebileceğini gösterir. column_list parantez içine alınmalıdır. language_term belirtilmediği sürece, column_list tüm sütunlarının dili aynı olmalıdır.
*
tablodaki tüm tam metin dizinli sütunların verilen arama koşulu için kullanılması gerektiğini belirtir. language_term belirtilmediği sürece, tablonun tüm sütunlarının dili aynı olmalıdır.
DIL language_term
Kaynakları sözcük kesme, kök oluşturma ve eş anlamlılar sözlüğü ile gürültü sözcüğünü (veya stopword) kaldırma için sorgunun bir parçası olarak kullanılan dil. Bu parametre isteğe bağlıdır ve bir dilin yerel ayar tanımlayıcısına (LCID) karşılık gelen bir dize, tamsayı veya onaltılık değer olarak belirtilebilir. language_term belirtilirse, temsil ettiği dil arama koşulunun tüm öğelerine uygulanır. Değer belirtilmezse, sütun tam metin dili kullanılır.
Farklı dillerdeki belgeler tek bir sütunda ikili büyük nesneler (BLOB) olarak birlikte depolanıyorsa, belirli bir belgenin yerel ayar tanımlayıcısı (LCID), içeriğini dizine almak için hangi dilin kullanıldığını belirler. Böyle bir sütunu sorguladığınızda, iyi bir eşleşme olasılığını artırmak için belirtin LANGUAGE <language_term> .
Dize olarak belirtildiğinde, language_termalias uyumluluk görünümündeki sütun değerine karşılık gelir. Dize, 'language_term' içinde olduğu gibi tek tırnak içine alınmalıdır. Tamsayı olarak belirtildiğinde, language_term dili tanımlayan gerçek LCID'dir. Onaltılık değer olarak belirtildiğinde, language_term 0x olur ve bunu LCID'nin onaltılık değeri izler. Onaltılık değer, baştaki sıfırlar da dahil olmak üzere sekiz basamağı aşmamalıdır.
Değer çift baytlık karakter kümesi (DBCS) biçimindeyse, SQL Server bunu Unicode'a dönüştürür.
Belirtilen dil geçerli değilse veya bu dile karşılık gelen hiçbir kaynak yüklü değilse, SQL Server bir hata döndürür. Nötr dil kaynaklarını kullanmak için 0x0 language_termolarak belirtin.
top_n_by_rank
Yalnızca n en yüksek dereceli eşleşmelerin azalan sırada döndürüldüğünü belirtir. Yalnızca nbir tamsayı değeri belirtildiğinde geçerlidir. top_n_by_rank diğer parametrelerle birleştirilirse, sorgu tüm koşullarla eşleşen satır sayısından daha az satır döndürebilir. top_n_by_rank yalnızca en ilgili isabetleri geri çekerek sorgu performansını artırmanıza olanak tanır.
<contains_search_condition>
column_name içinde aranacak metni ve eşleşme koşullarını belirtir. Arama koşulları hakkında bilgi için bkz. CONTAINS.
Açıklamalar
Tam metin önkoşulları ve işlevleri, koşulda FROM yer alan tek bir tabloda çalışır. Birden çok tabloda arama yapmak için yan tümcenizdeki FROM birleştirilmiş tabloyu kullanarak iki veya daha fazla tablonun ürünü olan bir sonuç kümesinde arama yapın.
Döndürülen tabloda tam metin anahtar değerleri içeren adlı KEY bir sütun vardır. Tam metin dizinli her tabloda, değerlerin benzersiz olması garanti edilen bir sütun vardır ve sütunda KEY döndürülen değerler, arama koşulunda belirtilen seçim ölçütleriyle eşleşen satırların tam metin anahtar değerleridir.
TableFulltextKeyColumn işlevinden OBJECTPROPERTYEX alınan özelliği, bu benzersiz anahtar sütununun kimliğini sağlar. Tam metin dizininin sys.fulltext_indexes tam metin anahtarıyla ilişkili sütunun kimliğini almak için daha fazla bilgi için bkz. sys.fulltext_indexes.
İstediğiniz satırları özgün tablodan almak için satırlarla CONTAINSTABLE bir birleşim belirtin. kullanan FROM bir SELECT deyiminin CONTAINSTABLE tipik yan tümcesi biçimi:
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];
tarafından CONTAINSTABLE üretilen tablo adlı RANKbir sütun içerir. Sütun RANK , her satır için bir satırın seçim ölçütlerine ne kadar uygun olduğunu gösteren bir değerdir (0 ile 1000 arasında). Bu derece değeri genellikle deyiminde şu yollardan SELECT birinde kullanılır:
Tablodaki
ORDER BYilk satırlar olarak en yüksek derecelendirmeli satırları döndürme yan tümcesinde.Her satıra atanan derecelendirme değerini görmek için seçme listesinde.
İzinler
Yürütme izinleri yalnızca tabloda veya başvuruda bulunulmuş tablonun sütunlarında uygun SELECT ayrıcalıklara sahip kullanıcılar tarafından kullanılabilir.
Örnekler
A. Temel örnek
Aşağıdaki örnek, üç ülkeyi/bölgeyi ve bayraklarındaki renkleri listeleyerek iki sütundan oluşan basit bir tablo oluşturur ve doldurur. Tabloda tam metin kataloğu ve dizini oluşturur ve doldurur.
CONTAINSTABLE Ardından söz dizimi gösterilmektedir. Bu örnekte, arama değeri birden çok kez karşılandığında derece değerinin nasıl daha yüksek arttığı gösterilmektedir. Son sorguda, hem yeşil hem de siyah içeren Tanzanya, sorgulanan renklerden yalnızca birini içeren İtalya'dan daha yüksek bir dereceye sahiptir.
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. Sıralama değerlerini döndürme
Aşağıdaki örnek , frameveya wheelsözcüklerini tireiçeren tüm ürün adlarını arar ve her sözcük için farklı ağırlıklar verilir. Bu arama ölçütlerine uyan döndürülen her satır için, eşleşmenin göreli yakınlığı (derecelendirme değeri) gösterilir. Buna ek olarak, en yüksek derecelendirme satırları önce döndürülür.
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. Belirtilen değerden büyük derece değerleri döndürme
için geçerlidir: SQL Server 2012 (11.x) ve sonraki sürümler.
Aşağıdaki örnek, tabloda birbirini aramak ve bracket kapatmak reflector için Production.Document NEAR kullanır. Yalnızca derece değeri 50 veya daha yüksek olan satırlar döndürülür.
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
Not
Tam metin sorgusu en fazla uzaklık olarak bir tamsayı belirtmezse, yalnızca boşluğu 100 mantıksal terimden büyük olan isabetleri içeren bir belge gereksinimleri karşılamaz NEAR ve derecelendirmesi 0'dır.
D. top_n_by_rank kullanarak ilk beş sıralanmış sonuç döndür
Aşağıdaki örnek, sütunun sözcüğün veya sözcüğün Descriptionaluminum yanında lightlightweightyer aldığı ilk beş ürünün açıklamasını döndürür.
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. Dİl bağımsız değişkenini belirtin
Aşağıdaki örnekte LANGUAGE bağımsız değişkeninin kullanılması gösterilmektedir.
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
Not
top_n_by_rank kullanmak için LANGUAGE language_term bağımsız değişkeni gerekli değildir .
İlgili içerik
- RANK ile arama sonuçlarını sınırlama
- Full-Text Arama ile
Sorgusu - Full-Text Arama Sorguları Oluşturma (Visual Database Araçları)
- İÇERİR (Transact-SQL)
- SELECT (Transact-SQL)
- FROM ifadesi artı JOIN, APPLY, PIVOT (Transact-SQL)