sp_fulltext_table (Transact-SQL)
标记或取消标记要编制全文索引的表。
重要
将来的 Microsoft SQL Server 版本中将会删除此功能。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。请改用 CREATE FULLTEXT INDEX、ALTER FULLTEXT INDEX 和 DROP FULLTEXT INDEX。
适用范围:SQL Server(SQL Server 2008 到当前版本) SQL 数据库 V12。 |
语法
sp_fulltext_table
[ @tabname= ] 'qualified_table_name'
, [ @action= ] 'action'
[
, [ @ftcat= ] 'fulltext_catalog_name'
, [ @keyname= ] 'unique_index_name'
]
参数
[ @tabname=] 'qualified_table_name'
由一部分或两部分组成的表的名称。表必须在当前数据库中。qualified_table_name 的数据类型为 nvarchar(517),无默认值[ @action=] 'action'
要执行的操作。action 的数据类型为 nvarchar(50),无默认值,可以是下列值之一。值
说明
Create
为 qualified_table_name 引用的表创建全文索引的元数据,并且指定该表的全文索引数据应驻留在 fulltext_catalog_name 中。此操作还将 unique_index_name 的用法指定为全文键列。这个唯一的索引必须已经存在,并且必须已在表的某个列上定义。
完成了全文目录填充后,才能对该表执行全文检索。
Drop
删除 qualified_table_name 的全文索引的元数据。如果全文索引是活动的,则将自动停用该全文索引,然后将其删除。在删除全文索引之前,不必删除列。
Activate
激活已经停用的为 qualified_table_name 收集全文索引数据的功能。在激活全文索引之前,应该至少有一列参与了全文索引。
只要添加了第一个要编制索引的列,便会自动激活全文索引(进行填充)。如果从索引中删除最后一个列,该索引便成为非活动索引。如果启用了更改跟踪,则激活非活动索引时将启动一个新填充。
请注意,这不会实际填充全文索引,而只是在文件系统的全文目录中注册表,从而在进行下一次全文索引填充时,可以检索来自 qualified_table_name 的行。
Deactivate
停用 qualified_table_name 的全文索引,从而无法再为 qualified_table_name 收集全文索引数据。全文索引元数据依然保留,该表可以被重新激活。
如果启用了更改跟踪,停用一个活动索引将冻结索引的状态:停止正在进行的所有填充,不再向索引传播更改。
start_change_tracking
启动全文索引的增量填充。如果表没有时间戳,则启动全文索引的完全填充。开始跟踪对表所做的更改。
全文更改跟踪不会跟踪对类型为 image、text 或 ntext 的全文索引列执行的任何 WRITETEXT 或 UPDATETEXT 操作。
stop_change_tracking
停止对表更改的跟踪。
update_index
将当前的一组跟踪的更改传播给全文索引。
start_background_updateindex
一旦发生更改,就启动将被跟踪的更改传播给全文索引。
stop_background_updateindex
一旦发生更改,就停止将被跟踪的更改传播给全文索引。
start_full
启动表的全文索引的完全填充。
start_incremental
启动表的全文索引的增量填充。
停止
停止完全填充或增量填充。
[ @ftcat=] 'fulltext_catalog_name'
用于 create 操作的一个现有全文目录有效名称。对于其他所有操作,此参数必须为 NULL。fulltext_catalog_name 的数据类型为 sysname,默认值为 NULL。[ @keyname=] 'unique_index_name'
对 create 操作的 qualified_table_name 的有效单个键列唯一非空索引。对于其他所有操作,此参数必须为 NULL。unique_index_name 的数据类型为 sysname,默认值为 NULL。
返回代码值
0(成功)或 1(失败)
结果集
无
备注
停用特定表的全文索引后,在下一次完全填充之前,现有的全文索引将留在原位;但是,由于 MicrosoftSQL Server 将阻止对停用的表的查询,所以不会使用该索引。
如果重新激活该表,但不重新填充索引,则仍可使用旧索引对剩余的启用了全文索引的非新列进行查询。在指定了完全全文列搜索的查询中,将匹配已删除的列中的数据。
定义了进行全文索引的表后,如果切换全文唯一键列的数据类型(通过更改该列的数据类型或更改全文唯一键列)时不完全重填,则可能导致后续查询失败,并返回以下错误消息:“将全文搜索键值 key_value 转换为 data_type 类型失败。”为了防止发生这种情况,可以使用 sp_fulltext_table 的 drop 操作删除此表的全文索引定义,然后使用 sp_fulltext_table 和 sp_fulltext_column 重新定义全文索引。
必须将全文键列定义为 900 字节或更少。考虑到性能原因,建议尽量使用较小的键列。
权限
只有 sysadmin 固定服务器角色、db_owner 和 db_ddladmin 固定数据库角色的成员,或对全文目录具有引用权限的用户才能执行 sp_fulltext_table。
示例
A.启用要进行全文索引的表
以下示例将为 Document 数据库的 AdventureWorks 表创建全文索引元数据。Cat_Desc 是一个全文目录。PK_Document_DocumentID 是针对 Document 的唯一单列索引。
USE AdventureWorks2012;
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 AdventureWorks2012;
GO
EXEC sp_fulltext_table 'Production.Document', 'Start_change_tracking';
EXEC sp_fulltext_table 'Production.Document', 'Start_background_updateindex';
GO
C.删除全文索引
以下示例将删除 Document 数据库的 AdventureWorks 表的全文索引元数据。
USE AdventureWorks2012;
GO
EXEC sp_fulltext_table 'Production.Document', 'drop';
GO
请参阅
INDEXPROPERTY (Transact-SQL)
OBJECTPROPERTY (Transact-SQL)
sp_help_fulltext_tables (Transact-SQL)
sp_help_fulltext_tables_cursor (Transact-SQL)
sp_helpindex (Transact-SQL)
系统存储过程 (Transact-SQL)
全文搜索和语义搜索存储过程 (Transact-SQL)