Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk: SQL Server
Azure SQL Database
Azure SQL Managed Instance
Mengembalikan tabel nol, satu, atau beberapa baris untuk kolom yang berisi kecocokan tepat atau fuzzy (kurang tepat) dengan satu kata dan frasa, kedekatan kata dalam jarak tertentu satu sama lain, atau kecocokan tertimbang.
CONTAINSTABLE digunakan dalam klausul FROM dari pernyataan Transact-SQL SELECT dan dirujuk seolah-olah itu adalah nama tabel biasa. Ini melakukan pencarian teks lengkap SQL Server pada kolom terindeks teks lengkap yang berisi jenis data berbasis karakter.
CONTAINSTABLE berguna untuk jenis kecocokan yang sama dengan CONTAINS dan menggunakan kondisi pencarian yang sama dengan CONTAINS.
Tidak seperti CONTAINS, namun, kueri menggunakan CONTAINSTABLE mengembalikan nilai peringkat relevansi (RANK) dan kunci teks lengkap (KEY) untuk setiap baris. Untuk informasi tentang formulir pencarian teks lengkap yang didukung oleh SQL Server, lihat Kueri dengan Pencarian Teks Lengkap.
Sintaks
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 ]
)
Argumen
tabel
Nama tabel yang telah diindeks teks lengkap. tabel dapat berupa nama objek database satu, dua, tiga, atau empat bagian. Saat Anda mengkueri tampilan, hanya satu tabel dasar terindeks teks lengkap yang dapat terlibat.
tabel tidak dapat menentukan nama server dan tidak dapat digunakan dalam kueri terhadap server tertaut.
column_name
Nama satu atau beberapa kolom yang diindeks untuk pencarian teks lengkap. Kolom dapat berjenis char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary, atau varbinary(max).
column_list
Menunjukkan bahwa beberapa kolom, yang dipisahkan oleh koma, dapat ditentukan. column_list harus diapit tanda kurung. Kecuali language_term ditentukan, bahasa semua kolom column_list harus sama.
*
Menentukan bahwa semua kolom terindeks teks lengkap dalam tabel harus digunakan untuk mencari kondisi pencarian yang diberikan. Kecuali language_term ditentukan, bahasa semua kolom tabel harus sama.
LANGUAGE_TERM BAHASA
Bahasa yang sumber dayanya digunakan untuk pemecahan kata, stemming, dan penghapusan tesaurus dan kata kebisingan (atau kata berhenti) sebagai bagian dari kueri. Parameter ini bersifat opsional dan dapat ditentukan sebagai string, bilangan bulat, atau nilai heksadesimal yang sesuai dengan pengidentifikasi lokal (LCID) bahasa. Jika language_term ditentukan, bahasa yang diwakilinya diterapkan ke semua elemen kondisi pencarian. Jika tidak ada nilai yang ditentukan, kolom bahasa teks lengkap digunakan.
Jika dokumen dari bahasa yang berbeda disimpan bersama-sama sebagai objek besar biner (BLOB) dalam satu kolom, pengidentifikasi lokal (LCID) dari dokumen tertentu menentukan bahasa apa yang digunakan untuk mengindeks kontennya. Saat Anda mengkueri kolom seperti itu, tentukan LANGUAGE <language_term> untuk meningkatkan probabilitas kecocokan yang baik.
Saat ditentukan sebagai string, language_term sesuai dengan alias nilai kolom dalam tampilan kompatibilitas sys.syslanguages . String harus diapit dalam tanda kutip tunggal, seperti dalam 'language_term'. Ketika ditentukan sebagai bilangan bulat, language_term adalah LCID aktual yang mengidentifikasi bahasa. Ketika ditentukan sebagai nilai heksadesimal, language_term adalah 0x diikuti oleh nilai heksadesimal LCID. Nilai heksadesimal tidak boleh melebihi delapan digit, termasuk nol di depannya.
Jika nilai dalam format kumpulan karakter byte ganda (DBCS), SQL Server mengonversinya ke Unicode.
Jika bahasa yang ditentukan tidak valid atau tidak ada sumber daya yang diinstal yang sesuai dengan bahasa tersebut, SQL Server mengembalikan kesalahan. Untuk menggunakan sumber daya bahasa netral, tentukan 0x0 sebagai language_term.
top_n_by_rank
Menentukan bahwa hanya n kecocokan berperingkat tertinggi, dalam urutan turun, yang dikembalikan. Hanya berlaku ketika nilai bilangan bulat, n, ditentukan. Jika top_n_by_rank dikombinasikan dengan parameter lain, kueri dapat mengembalikan lebih sedikit baris daripada jumlah baris yang benar-benar cocok dengan semua predikat. top_n_by_rank memungkinkan Anda meningkatkan performa kueri dengan hanya mengingat hit yang paling relevan.
<contains_search_condition>
Menentukan teks yang akan dicari di column_name dan kondisi untuk kecocokan. Untuk informasi tentang kondisi pencarian, lihat CONTAINS.
Keterangan
Predikat teks lengkap dan fungsi bekerja pada satu tabel, yang tersirat dalam FROM predikat. Untuk mencari di beberapa tabel, gunakan tabel yang digabungkan dalam klausul Anda FROM untuk mencari pada tataan hasil yang merupakan produk dari dua tabel atau lebih.
Tabel yang dikembalikan memiliki kolom bernama KEY yang berisi nilai kunci teks lengkap. Setiap tabel terindeks teks lengkap memiliki kolom yang nilainya dijamin unik, dan nilai yang dikembalikan dalam KEY kolom adalah nilai kunci teks lengkap dari baris yang cocok dengan kriteria pilihan yang ditentukan dalam berisi kondisi pencarian. Properti TableFulltextKeyColumn , yang diperoleh dari OBJECTPROPERTYEX fungsi , menyediakan identitas kolom kunci unik ini. Untuk mendapatkan ID kolom yang terkait dengan kunci teks lengkap indeks teks lengkap, gunakan sys.fulltext_indexes Untuk informasi selengkapnya, lihat sys.fulltext_indexes.
Untuk mendapatkan baris yang Anda inginkan dari tabel asli, tentukan gabungan dengan CONTAINSTABLE baris. Bentuk FROM umum klausul untuk pernyataan yang SELECT menggunakan CONTAINSTABLE adalah:
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];
Tabel yang diproduksi dengan CONTAINSTABLE menyertakan kolom bernama RANK. Kolom RANK adalah nilai (dari 0 hingga 1000) untuk setiap baris yang menunjukkan seberapa baik baris cocok dengan kriteria pilihan. Nilai peringkat ini biasanya digunakan dalam salah satu cara ini SELECT dalam pernyataan:
ORDER BYDalam klausa untuk mengembalikan baris peringkat tertinggi sebagai baris pertama dalam tabel.Dalam daftar pilih untuk melihat nilai peringkat yang ditetapkan untuk setiap baris.
Izin
Izin eksekusi hanya tersedia oleh pengguna dengan hak istimewa yang sesuai SELECT pada tabel atau kolom tabel yang dirujuk.
Contoh
J. Contoh dasar
Contoh berikut membuat dan mengisi tabel sederhana dari dua kolom, mencantumkan tiga negara/wilayah dan warna dalam benderanya. Ini membuat dan mengisi katalog teks lengkap dan indeks pada tabel.
CONTAINSTABLE Kemudian sintaks ditunjukkan. Contoh ini menunjukkan bagaimana nilai peringkat tumbuh lebih tinggi ketika nilai pencarian terpenuhi beberapa kali. Dalam kueri terakhir, Tanzania, yang berisi hijau dan hitam, memiliki peringkat yang lebih tinggi daripada Italia yang hanya berisi salah satu warna yang dikueri.
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. Mengembalikan nilai peringkat
Contoh berikut mencari semua nama produk yang berisi kata frame, , wheelatau tire, dan bobot yang berbeda diberikan untuk setiap kata. Untuk setiap baris yang dikembalikan yang cocok dengan kriteria pencarian ini, kedekatan relatif (nilai peringkat) dari kecocokan ditampilkan. Selain itu, baris peringkat tertinggi dikembalikan terlebih dahulu.
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. Mengembalikan nilai peringkat yang lebih besar dari nilai yang ditentukan
Berlaku untuk: SQL Server 2012 (11.x) dan versi yang lebih baru.
Contoh berikut menggunakan NEAR untuk mencari bracket dan reflector berdekatan Production.Document satu sama lain dalam tabel. Hanya baris dengan nilai peringkat 50 atau lebih tinggi yang dikembalikan.
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
Catatan
Jika kueri teks lengkap tidak menentukan bilangan bulat sebagai jarak maksimum, dokumen yang hanya berisi hit yang kesenjangannya lebih besar dari 100 istilah logis tidak memenuhi NEAR persyaratan, dan peringkatnya adalah 0.
D. Mengembalikan lima hasil peringkat teratas menggunakan top_n_by_rank
Contoh berikut mengembalikan deskripsi lima produk teratas di mana Description kolom berisi kata aluminum di dekat kata light atau kata 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. Tentukan argumen LANGUAGE
Contoh berikut menunjukkan penggunaan LANGUAGE argumen .
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
Catatan
Argumen LANGUAGE language_term tidak diperlukan untuk menggunakan top_n_by_rank.