ALTER FULLTEXT INDEX (Transact-SQL)

變更全文檢索索引的屬性。

主題連結圖示Transact-SQL 語法慣例

語法

ALTER FULLTEXT INDEX ON table_name
   { ENABLE 
   | DISABLE
   | SET CHANGE_TRACKING { MANUAL | AUTO | OFF }
   | ADD ( column_name 
     [ TYPE COLUMN type_column_name ] 
     [ LANGUAGE language_term ] [,...n] )
     [ WITH NO POPULATION ]
   | DROP ( column_name [,...n] )
     [WITH NO POPULATION ] 
   | START { FULL | INCREMENTAL | UPDATE } POPULATION
   | {STOP | PAUSE | RESUME } POPULATION 
   | SET STOPLIST { OFF| SYSTEM | stoplist_name }
     [WITH NO POPULATION] 
   }
[;]

引數

  • table_name
    這是包括在全文檢索索引中之一個或多個資料行所在的資料表或索引檢視表名稱。資料庫和資料表擁有者名稱的指定是選擇性的。

  • ENABLE | DISABLE
    告知 SQL Server 是否要蒐集 table_name 的全文檢索索引資料。ENABLE 會啟動全文檢索索引;DISABLE 會關閉全文檢索索引。

    當停用全文檢索索引時,全文檢索索引中繼資料會保留在系統資料表中。如果停用全文檢索索引時,CHANGE_TRACKING 在已啟用狀態 (自動或手動更新),索引狀態會凍結,而且任何進行中的搜耙都會停止,此時不會追蹤資料表資料的新變更,也不會將它們傳播到索引中。您可以利用 ENABLE 來重新啟動 table_name 的全文檢索索引。

  • SET CHANGE_TRACKING {MANUAL | AUTO | OFF}
    指定全文檢索索引涵蓋的資料表資料行變更 (更新、刪除或插入),是否會由 SQL Server 傳播到全文檢索索引。透過 WRITETEXT 和 UPDATETEXT 的資料變更並不會反映在全文檢索索引中,變更追蹤並不會收取這些變更。

    [!附註]

    如需有關變更追蹤與 WITH NO POPULATION 之間互動的詳細資訊,請參閱本主題後面的「備註」一節。

  • MANUAL
    指定將會藉由呼叫 ALTER FULLTEXT INDEX … START UPDATE POPULATION Transact-SQL 陳述式來手動傳播追蹤變更 (「手動母體擴展」 (Manual population))。您可以使用 SQL Server Agent 來定期呼叫這個 Transact-SQL 陳述式。

  • AUTO
    指定在修改基底資料表中的資料時,同時自動傳播追蹤變更 (「自動母體擴展」(Automatic population))。雖然變更會自動傳播,但這些變更可能不會立即反映在全文檢索索引中。預設值是 AUTO。

  • OFF
    指定 SQL Server 不保留索引資料的變更清單。

  • ADD | DROP column_name
    指定要在全文檢索索引中新增或刪除的資料行。資料行的類型必須是 char、varchar、nchar、nvarchar、text、ntext、image、xml、varbinary 或 varbinary(max)。

    請只在先前已啟用了全文檢索索引的資料行上,使用 DROP 子句。

    使用 TYPE COLUMN 和 LANGUAGE 來搭配 ADD 子句,在 column_name 上設定這些屬性。當新增資料行時,您必須重新擴展資料表的全文檢索索引,針對這個資料行的全文檢索查詢才能運作。

    [!附註]

    全文檢索索引是要在加入資料行之後擴展還是從全文檢索索引卸除,將取決於是否啟用變更追蹤及是否指定 WITH NO POPULATION 而定。如需詳細資訊,請參閱此主題稍後的「備註」。

  • TYPE COLUMN type_column_name
    指定用於保存 varbinary、varbinary(max) 或 image 文件之文件類型的資料表資料行名稱 (type_column_name)。這個資料行 (稱為類型資料行) 包含使用者提供的副檔名 (.doc、.pdf、.xls 等等)。類型資料行的類型必須是 char、nchar、varchar 或 nvarchar。

    只有當 column_name 指定了將資料儲存為二進位資料的 varbinary、varbinary(max) 或image 資料行,才應指定 TYPE COLUMN type_column_name,否則 SQL Server 會傳回錯誤。

    [!附註]

    建立索引時,全文檢索引擎會使用各資料表資料列之類型資料行中的縮寫,以便識別要為 column_name 中的文件使用哪一種全文檢索搜尋篩選。篩選會將文件載入為二進位資料流、移除格式資訊,並且將文件中的文字傳送到斷詞工具元件。如需詳細資訊,請參閱<全文檢索搜尋篩選>。

  • LANGUAGE language_term
    這是 column_name 所儲存之資料的語言。

    language_term 是選擇性的,可以指定成對應於語言地區設定識別碼 (LCID) 的字串、整數或十六進位值。如果指定了 language_term,就會將它代表的語言套用至搜尋條件的所有元素上。如果未指定任何值,就會使用 SQL Server 執行個體的預設全文檢索語言。

    請利用 sp_configure 預存程序來存取 SQL Server 執行個體的預設全文檢索語言的相關資訊。如需詳細資訊,請參閱<default full-text language 選項>。

    當指定為字串時,language_term 會對應到 syslanguages 系統資料表中的 alias 資料行值。字串必須以單引號括住,如 'language_term'。當指定為整數時,language_term 是用於識別語言的實際 LCID。當指定為十六進位值時,language_term 是 0x,後面接著 LCID 的十六進位值。十六進位值不能超出 8 位數,開頭的零也包括在內。

    如果這個值是雙位元組字集 (DBCS) 格式,SQL Server 會將它轉換成 Unicode。

    您必須針對指定為 language_term 的語言來啟用資源,如斷詞工具和字幹分析器。如果這些資源不支援指定的語言,SQL Server 會傳回錯誤。

    如果是包含多種語言之文字資料的非 BLOB 和非 XML 資料行,或資料行所儲存的文字語言不明,請使用中性 (0x0) 語言資源。如果是儲存在 XML 或 BLOB 類型資料行中的文件,在建立索引時,將使用文件內的語言編碼。例如,在 XML 資料行中,XML 文件的 xml:lang 屬性會識別語言。在查詢時,除非在全文檢索查詢中指定 language_term,否則,language_term 先前所指定的值會成為全文檢索查詢所用的預設語言。

  • [ ,...n]
    指出 ADD 或 DROP 子句可以指定多個資料行。當指定多個資料行時,請用逗號來分開這些資料行。

  • WITH NO POPULATION
    指定在 ADD 或 DROP 資料行作業或是 SET STOPLIST 作業之後,將不會擴展全文檢索索引。只有在使用者執行 START...POPULATION 命令時,才擴展索引。

    當指定 NO POPULATION 時,SQL Server 並不會擴展索引。只有在使用者提供了 ALTER FULLTEXT INDEX...START POPULATION 命令之後,才會擴展索引。未指定 NO POPULATION 時,SQL Server 會擴展索引。

    如果既啟用 CHANGE_TRACKING,又指定 WITH NO POPULATION,SQL Server 會傳回錯誤。如果啟用了 CHANGE_TRACKING,但沒有指定 WITH NO POPULATION,SQL Server 會執行索引的完整母體擴展。

    [!附註]

    如需有關變更追蹤與 WITH NO POPULATION 之間互動的詳細資訊,請參閱本主題後面的「備註」一節。

  • START {FULL|INCREMENTAL|UPDATE} POPULATION
    通知 SQL Server 來開始擴展 table_name 的全文檢索索引。如果全文檢索索引擴展已在進行中,SQL Server 會傳回警告,且不會開始新的擴展。

    • FULL
      指定全文檢索索引要擷取資料表的每個資料列,即使資料列已建立了索引也一樣。

    • INCREMENTAL
      指定全文檢索索引只擷取前次擴展之後又修改過的資料列。資料表必須有 timestamp 類型的資料行,INCREMENTAL 才適用。如果全文檢索目錄中的資料表並未包含 timestamp 類型的資料行,資料表就會進行 FULL 擴展。

    • UPDATE
      指定處理上次更新變更追蹤索引之後的所有插入、更新或刪除。資料表上必須啟用變更追蹤擴展,但不應開啟背景更新索引或自動變更追蹤。

  • {STOP | PAUSE | RESUME } POPULATION
    停止或暫停任何進行中的擴展動作,或是停止或繼續任何已暫停的擴展動作。

    STOP POPULATION 不會停止自動變更追蹤或背景更新索引。若要停止變更追蹤,請使用 SET CHANGE_TRACKING OFF。

    PAUSE POPULATION 和 RESUME POPULATION 只適用於完整母體擴展。它們與其他擴展類型無關,因為其他擴展會從搜耙停止處繼續搜耙。

  • SET STOPLIST { OFF| SYSTEM | stoplist_name }
    變更要與此索引產生關聯的全文檢索停用字詞表。

    • OFF
      指定沒有任何停用字詞表要與全文檢索索引產生關聯。

    • SYSTEM
      指定預設全文檢索系統 STOPLIST 應該用於這個全文檢索索引。

    • stoplist_name
      指定要與全文檢索索引產生關聯的停用字詞表名稱。

    [!附註]

    如需有關變更追蹤與 WITH NO POPULATION 之間互動的詳細資訊,請參閱本主題後面的「備註」一節。

備註

您可以在 xml 資料行上建立全文檢索索引,檢索 XML 元素的內容,但忽略 XML 標記。屬性值是全文檢索索引的值 (除非它們是數值)。元素標記會當做 Token 界限來使用。包含多重語言、格式正確的 XML 或 HTML 文件和片段都受到支援。如需詳細資訊,請參閱<XML 資料行上的全文檢索索引>。

變更追蹤與 NO POPULATION 參數之間的互動

全文檢索索引是否會擴展,將取決於是否啟用變更追蹤及是否在 ALTER FULLTEXT INDEX 陳述式中指定 WITH NO POPULATION 而定。下表摘要列出其互動的結果。

變更追蹤

WITH NO POPULATION

結果

未啟用

未指定

在索引上執行完整母體擴展。

未啟用

已指定

要等到發出 ALTER FULLTEXT INDEX...START POPULATION 陳述式之後,才會進行索引的母體擴展。

已啟用

已指定

引發錯誤,而且索引不會改變。

已啟用

未指定

在索引上執行完整母體擴展。

權限

使用者必須具有資料表或索引檢視表的 ALTER 權限,或必須是系統管理員 (sysadmin) 固定伺服器角色的成員,或是 db_ddladmindb_owner 固定資料庫角色的成員。

如果指定了 SET STOPLIST,使用者在停用字詞表上必須具有 REFERENCES 權限。STOPLIST 的擁有者可以授與這個權限。此外,授與 REFERENCES 權限也需要 ALTER FULLTEXT CATALOG 權限。

[!附註]

一般使用者會被授與 SQL Server 所隨附之預設停用字詞表的 REFERENCE 權限。

範例

下列範例會修改 AdventureWorks 資料庫之 JobCandidate 資料表中的全文檢索索引。

USE AdventureWorks;
GO
ALTER FULLTEXT INDEX ON HumanResources.JobCandidate ENABLE;
GO

變更記錄

更新的內容

更新「變更追蹤與 NO POPULATION 參數之間的互動」一節,並更正啟用變更追蹤時 WITH NO POPULATION 資料行中的值。