全文檢索服務讓 SQL Server 能對大量文字資料進行語意搜尋 (CONTAINS/FREETEXT)。本文以 pubs 資料庫的 titles 表為例,詳細說明使用系統預存程序建立全文索引的六大步驟與查詢範例。
EXEC sp_fulltext_database 'enable'EXEC sp_fulltext_catalog 'FT_Pubs', 'create'EXEC sp_fulltext_table 'titles', 'create', 'FT_Pubs', 'UPKCL_titleidind' (需指定唯一索引鍵)EXEC sp_fulltext_column 'titles', 'title', 'add' / EXEC sp_fulltext_column 'titles', 'notes', 'add'EXEC sp_fulltext_table 'titles', 'activate'EXEC sp_fulltext_catalog 'FT_Pubs', 'start_full' (可搭配 FULLTEXTCATALOGPROPERTY 監控進度)USE pubs; GO
-- 1. 啟用全文功能
IF (SELECT DATABASEPROPERTY('pubs', 'IsFulltextEnabled')) = 0
EXEC sp_fulltext_database 'enable';
-- 2. 建立全文目錄
EXEC sp_fulltext_catalog 'FT_Pubs', 'create';
-- 3. 註冊 titles 表 (UPKCL_titleidind 為主鍵索引名)
EXEC sp_fulltext_table 'titles', 'create', 'FT_Pubs', 'UPKCL_titleidind';
-- 4. 指定索引欄位
EXEC sp_fulltext_column 'titles', 'title', 'add';
EXEC sp_fulltext_column 'titles', 'notes', 'add';
-- 5. 啟用全文索引
EXEC sp_fulltext_table 'titles', 'activate';
-- 6. 完整填補
EXEC sp_fulltext_catalog 'FT_Pubs', 'start_full';
-- 等待填補完成
WHILE FULLTEXTCATALOGPROPERTY('FT_Pubs', 'PopulateStatus') <> 0
WAITFOR DELAY '00:00:30';
-- 7. 全文查詢範例
SELECT title FROM titles
WHERE CONTAINS(title, 'database')
OR CONTAINS(title, 'computer')
OR CONTAINS(notes, 'database')
OR CONTAINS(notes, 'computer');
| 程序名稱 | 權限需求 | 主要功能 |
|---|---|---|
| sp_fulltext_service | serveradmin / sysadmin | 設定全文搜尋屬性 (斷字器、雜訊詞等) |
| sp_fulltext_catalog | db_owner | 建立/刪除目錄、啟動/停止/更新填補 |
| sp_fulltext_database | db_owner | 啟用/停用資料庫全文功能、移除所有目錄 |
| sp_fulltext_table | db_ddladmin / db_owner | 建立/刪除/啟用/停用資料表全文索引 |
| sp_fulltext_column | db_ddladmin | 加入/移除索引欄位、指定語言 |
EXEC sp_fulltext_catalog 'FT_Pubs', 'start_incremental' 僅處理變更資料,適合固定排程。WITH CHANGE_TRACKING AUTO (SQL 2005+ 新語法) 自動維護。sp_fulltext_service 'update_languages' 更新語言清單。max full-text crawl range 降低 CPU 衝擊。注意:SQL Server 2005+ 引入新 DDL 語法 (CREATE FULLTEXT CATALOG/INDEX),建議新專案改用新語法,舊版預存程序僅為相容保留。