无法在具有FULLTEXT索引的表上删除主键

6
我是一名有用的助手,可以为您翻译文本。

我有一个包含主键的表,主键数据类型为int。 我想删除此列(因为它未被使用,我担心此列可能达到int数据类型的最大限制,所以我们不妨将其删除)。

首先,我无法删除该约束,尝试使用以下命令:

ALTER TABLE dbo.MyTable DROP CONSTRAINT PK_MyTableID

我遇到了以下错误:
无法删除索引'PK_MyTableID',因为它强制执行'MyTable'表或索引视图的全文键。
我不理解这个错误,因为主键是一个int,而且我不认为这个表有FULLTEXT索引,但如果有,我也不需要它。
编辑:
在删除FULLTEXT索引后,我成功删除了该列。
DROP FULLTEXT INDEX ON dbo.MyTable

如果您要删除表中唯一的列,为什么不直接删除整个表呢? - Dan
你确定那个表上没有全文索引吗?这个查询会返回什么?SELECT INDEXPROPERTY(OBJECT_ID('dbo.MyTable'),'PK_MyTableID','IsFulltextKey') - Lamak
@Dan:抱歉,我简化了我的问题,去掉了所有其他无关的列;它并不是表格上唯一的列。 - Jay Sullivan
@Lamak:嗯,有两个索引,都是int类型的。你的查询返回1。但是......一个int列上可以有全文索引吗? - Jay Sullivan
1
@notfed 不是因为该列上有FULLTEXT索引,而是它使用该列来创建索引的键。因此,您不能只是这样删除索引。 - Lamak
1个回答

6
我相信这个表上有一个全文索引。全文索引需要你拥有唯一键:
来自MSDN:KEY INDEX index_name 是表table_name上唯一键索引的名称。KEY INDEX必须是唯一的、单键、非空列。为了获得全文唯一键,选择最小的唯一键索引。为了获得最佳性能,我们建议使用整数数据类型作为全文键。
您可以使用以下命令检查表的全文索引:
SELECT object_id, property_list_id, stoplist_id FROM sys.fulltext_indexes
    where object_id = object_id('myTable'); 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接