sp_fulltext_table (Transact-SQL)

适用于:SQL ServerAzure Synapse Analytics

标记或取消标记要编制全文索引的表。

重要

在 SQL Server的未来版本中将删除此功能。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。 请改用 CREATE FULLTEXT INDEXALTER FULLTEXT INDEXDROP FULLTEXT INDEX

Transact-SQL 语法约定

语法

sp_fulltext_table
    [ @tabname = ] N'tabname'
    , [ @action = ] 'action'
    [ , [ @ftcat = ] N'ftcat' ]
    [ , [ @keyname = ] N'keyname' ]
[ ; ]

参数

[ @tabname = ] N'tabname'

由一部分或两部分构成的表名称。 表必须在当前数据库中。 @tabname为 nvarchar(517),没有默认值。

[ @action = ] 'action'

要执行的操作。 @action为 nvarchar(50),没有默认值,可以是其中一个值。

说明
创建 为由@tabname引用的表创建全文索引的元数据,并指定此表的全文索引数据应驻留在@ftcat中。 此操作还指定使用 @keyname 作为全文键列。 这个唯一的索引必须已经存在,并且必须已在表的某个列上定义。

在填充全文目录之前,无法对此表执行全文搜索。
Drop 删除@tabname全文索引上的元数据。 如果全文索引处于活动状态,则会在删除之前自动停用该索引。 删除全文索引之前,无需删除列。
激活 激活停用@tabname后要收集的全文索引数据的功能。 在激活全文索引之前,应该至少有一列参与了全文索引。

只要添加了第一个要编制索引的列,便会自动激活全文索引(进行填充)。 如果从索引中删除最后一个列,该索引便成为非活动索引。 如果启用了更改跟踪,则激活非活动索引时将启动一个新填充。

这实际上不会填充全文索引,而只是在文件系统中的全文目录中注册表,以便在下一个全文索引填充期间检索来自@tabname的行
停用 停用@tabname的全文索引,以便无法再为@tabname收集全文索引数据。 全文索引元数据依然保留,该表可以被重新激活。

如果启用了更改跟踪,停用一个活动索引将冻结索引的状态:停止正在进行的所有填充,不再向索引传播更改。
start_change_tracking 启动全文索引的增量填充。 如果表没有时间戳,请启动全文索引的完整填充。 开始跟踪对表所做的更改。

全文更改跟踪不会跟踪对类型为图像、文本或 ntext 的全文索引列执行的任何 WRITETEXT 或 UPDATETEXT 操作。
stop_change_tracking 停止对表更改的跟踪。
update_index 将当前的一组跟踪的更改传播给全文索引。
start_background_updateindex 一旦发生更改,就启动将被跟踪的更改传播给全文索引。
stop_background_updateindex 一旦发生更改,就停止将被跟踪的更改传播给全文索引。
start_full 启动表的全文索引的完全填充。
start_incremental 启动表的全文索引的增量填充。
停止 停止完全填充或增量填充。

[ @ftcat = ] N'ftcat'

创建操作的有效现有全文目录名称。 对于其他所有操作,此参数必须为 NULL。 @ftcat为 sysname,默认值为 NULL.

[ @keyname = ] N'keyname'

创建操作的@tabname有效的单键列唯一不可为 null 索引。 对于其他所有操作,此参数必须为 NULL。 @keyname为 sysname,默认值为 NULL.

返回代码值

0(成功)或 1(失败)。

结果集

无。

注解

为特定表停用全文索引后,现有全文索引将保留到下一个完整填充:但是,不会使用此索引,因为 SQL Server 会阻止对已停用表的查询。

如果重新激活表且索引未重新填充,则旧索引仍可用于针对任何剩余列的查询,但不适用于启用全文的新列。 在指定了完全全文列搜索的查询中,将匹配已删除的列中的数据。

为全文索引定义表后,通过将该列的数据类型更改为另一种数据类型,将全文唯一键列切换到另一种数据类型,或者将全文唯一键从一列更改为另一列,而不进行完全重新填充可能会导致后续查询期间失败并返回错误消息:

对于全文搜索键值key_value,转换为类型data_type失败。

若要防止此错误,请使用删除操作sp_fulltext_table删除此表的全文定义,并使用和sp_fulltext_column重新定义该sp_fulltext_table表的全文定义。

必须将全文键列定义为 900 字节或更少。 建议出于性能原因,键列的大小尽可能小。

权限

只有 sysadmin 固定服务器角色的成员db_ownerdb_ddladmin固定数据库角色的成员,或者对全文目录具有引用权限的用户才能执行sp_fulltext_table

示例

A. 为表格启用全文索引

以下示例将为 Document 数据库的 AdventureWorks 表创建全文索引元数据。 Cat_Desc 是一个全文目录。 PK_Document_DocumentID 是针对 Document 的唯一单列索引。

USE AdventureWorks2022;
GO

EXEC sp_fulltext_table 'Production.Document',
    'create',
    'Cat_Desc',
    'PK_Document_DocumentID';

--Add some columns
EXEC sp_fulltext_column 'Production.Document',
    'DocumentSummary',
    'add';

-- Activate the full-text index
EXEC sp_fulltext_table 'Production.Document',
    'activate';
GO

B. 激活和传播修订

下例将在更改发生时激活跟踪更改并开始将跟踪的更改传播给全文索引。

USE AdventureWorks2022;
GO
EXEC sp_fulltext_table 'Production.Document', 'Start_change_tracking';
EXEC sp_fulltext_table 'Production.Document', 'Start_background_updateindex';
GO

°C 删除全文索引

以下示例将删除 Document 数据库的 AdventureWorks 表的全文索引元数据。

USE AdventureWorks2022;
GO
EXEC sp_fulltext_table 'Production.Document', 'drop';
GO