sql server 2005 T-SQL ALTER FULLTEXT INDEX (Transact-SQL)

来源:互联网 发布:oracle和mysql的转换 编辑:程序博客网 时间:2024/04/16 15:10

更改全文索引的属性。

主题链接图标 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
   }
table_name

包含全文索引中的一列或多列的表的名称。可以选择指定数据库和表所有者名称。

ENABLE | DISABLE

通知 Microsoft SQL Server 是否收集 table_name 的全文索引数据。ENABLE 激活全文索引;DISABLE 关闭全文索引。

如果禁用全文索引,则全文索引元数据将保留在系统表中。禁用全文索引时,如果 CHANGE_TRACKING 处于启用状态(自动或手动更新),则索引状态将冻结,任何正在进行的爬网将停止,并且不会跟踪对表数据进行的新更改,也不会将这些更改传播到索引。可以使用 ENABLE 重新激活对 table_name 的全文索引。

SET CHANGE_TRACKING {MANUAL | AUTO | OFF}

指定 SQL Server 是否维护一份对索引数据(位于全文目录中)的全部更改的列表。通过 WRITETEXT 和 UPDATETEXT 所做的数据更改不会反映到全文索引中,也不能使用更改跟踪方法拾取。

若要修改全文索引的 CHANGE_TRACKING 状态,不能将全文索引表所在的 FILEGROUP 设置为 OFFLINE 或 READONLY。否则,此命令将失败,且 SQL Server 将返回错误。

MANUAL

指定是使用 SQL Server 代理按计划传播更改跟踪日志还是由用户手动进行传播。

AUTO

指定在关联表中修改数据时,SQL Server 将自动更新全文索引。默认值为 AUTO。

OFF

指定 SQL Server 将不保存对索引数据的更改的列表。

ADD | DROP column_name

指定要添加到全文索引或从全文索引中删除的列。列的类型必须为 charvarcharncharnvarchartextntextimagexmlvarbinary(max)

仅对先前为全文索引启用的列使用 DROP 子句。

TYPE COLUMN 和 LANGUAGE 与 ADD 子句一起使用,以设置 column_name 的属性。添加列后,必须重新填充该表的全文索引,才能使针对此列进行的全文查询生效。

除非指定了 WITH NO POPULATION,否则 SQL Server 会在向全文索引添加列或从其中删除列之后自动启动一个完全填充。

TYPE COLUMN type_column_name

table_name 中列的名称,用于存储 column_name 的文档类型。仅当 column_name 列的类型为 varbinary(max)image 时,才指定 type_column_name

TYPE COLUMN 的数据类型可以是 charncharvarcharnvarchar。有关全文支持文件的格式以及 varbinary(max) 列中存储的索引数据的详细信息,请参阅筛选器。

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 的十六进制值。十六进制值不能超过八位(包括前导零在内)。

如果该值是双字节字符集 (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 列操作之后不填充全文索引。仅当用户执行 START...POPULATION 命令时,才会填充该索引。

如果启用了 CHANGE_TRACKING 并指定了 WITH NO POPULATION,SQL Server 将返回一个错误。如果启用了 CHANGE_TRACKING,但未指定 WITH NO POPULATION,SQL Server 将在创建索引后对此索引执行完全填充。

仅当 CHANGE_TRACKING 为 OFF 时,才能使用 NO POPULATION 选项。如果指定了 NO POPULATION,则 SQL Server 在创建索引后不会对其进行填充。仅当用户指定了 ALTER FULLTEXT INDEX...START POPULATION 命令后,才填充此索引。如果未指定 NO POPULATION,SQL Server 将在创建索引后填充此索引。

START {FULL|INCREMENTAL|UPDATE} POPULATION

通知 SQL Server 开始填充 table_name 的全文索引。如果全文索引填充已在执行,SQL Server 将返回一个警告,并且不会启动新的填充。

FULL

指定检索表中的每一行以进行全文索引,即使已对这些行进行了索引。

INCREMENTAL

指定仅检索自上次填充以来修改的行以进行全文索引。仅当表包含一个类型为 timestamp 的列时,才能应用 INCREMENTAL。如果全文目录中的表不包含 timestamp 类型的列,则将对该表进行完全填充。

UPDATE

指定对自上次更新更改跟踪索引以来的所有插入、更新或删除进行处理。必须对表启用更改跟踪填充,但不应打开后台更新索引或自动更改跟踪。

{STOP | PAUSE | RESUME } POPULATION

停止或暂停正在进行的任何填充;或者停止或恢复任何暂停的填充。

STOP POPULATION 不会停止自动更改跟踪或后台更新索引。若要停止更改跟踪,请使用 SET CHANGE_TRACKING OFF。

PAUSE POPULATION 和 RESUME POPULATION 只能用于完全填充。它们与其他填充类型无关,因为其他填充从爬网停止的位置恢复爬网。

当对 xml 数据类型的数据实例进行索引以进行全文搜索时,不对属性和元素名进行索引,且无法查询;但可以在每个实例中对元素值进行索引和查询。支持包含多种语言并且格式正确的 XML 文档和片段。

用户必须对表或视图具有 ALTER 权限,或者是 sysadmin 固定服务器角色的成员,或者是 db_ddladmindb_owner 固定数据库角色的成员。

以下示例修改 AdventureWorks 数据库的 JobCandidate 表中的全文索引。

复制代码
USE AdventureWorks;
GO
ALTER FULLTEXT INDEX ON HumanResources.JobCandidate ENABLE;
GO