Sql server SQL Server 2008对具有复合主键的表进行全文搜索

Sql server SQL Server 2008对具有复合主键的表进行全文搜索,sql-server,tsql,sql-server-2008,full-text-search,primary-key,Sql Server,Tsql,Sql Server 2008,Full Text Search,Primary Key,我尝试在SQL Server 2008上使用全文搜索,但是我尝试索引的表是一个具有复合主键的表,类似于以下内容: EXEC sp_fulltext_catalog 'My_Catalog', 'create' EXEC sp_fulltext_table 'Message', 'create', 'My_Catalog', 'PK__MESSAGES__C87C0C9C0EC32C7A' // PK__MESSAGES__C87C0C9C1EC32C6A is a composite key

我尝试在SQL Server 2008上使用全文搜索,但是我尝试索引的表是一个具有复合主键的表,类似于以下内容:

EXEC sp_fulltext_catalog 'My_Catalog', 'create'
EXEC sp_fulltext_table 'Message', 'create', 'My_Catalog', 'PK__MESSAGES__C87C0C9C0EC32C7A' // PK__MESSAGES__C87C0C9C1EC32C6A is a composite key
我得到以下错误:

“'PK__MESSAGES__C87C0C9C1EC32C6A'不是强制 全文搜索键。全文搜索键必须是唯一的, 未定义非脱机的不可为空的单列索引 在非确定性或不精确的非分散计算列上,是否 没有筛选器,最大大小为900字节。请选择其他筛选器 全文键的索引。“

这意味着我不能在具有复合主键的表中使用全文搜索?还是我做错了什么

全文搜索键必须是 唯一、不可为null的单列 未脱机的索引不可用 定义在非确定性或 不精确非分散计算 列,没有筛选器,并且 最大大小为900字节


请注意,它不必是主键(即表上的主键约束)。不可为空的单列上的任何唯一索引都可以使用。如果没有这样的列,请向表中添加标识列并添加索引,然后将此索引用于全文目录。

我认为错误消息非常清楚,不是吗

PK_MESSAGES_C87C0C9C1EC32C6A
用于强制全文索引的有效索引 搜索键。全文搜索键 必须是唯一且不可为空的, 单列索引不是 脱机,未在上定义 不确定的或不精确的 非持久化计算列,不包含 有一个过滤器,最大大小为 900字节。请为其选择另一个索引 全文键。“

如果索引不是唯一的、不可为空的,并且不是单列,则不能将其用于全文索引

这意味着我不能使用完整的 在具有复合属性的表中进行文本搜索 主键?还是我在做什么 错了吗

不,正如错误所说,这种索引不起作用。时期没办法


正如Remus指出的——它从来没有说过它必须是主键索引!如果表中有其他不可为空且唯一的字段,则可以使用该字段上的唯一索引。您甚至可以简单地在表中添加一个
INT-IDENTITY(1,1)
字段,并在该字段上放置一个
唯一索引,这样就可以了。

这正是我所期望的,我可能弄错了,因为复合主键仍然是唯一约束(但不是单列,这就是问题所在)。非常感谢,我刚刚创建了唯一字段,并使用=)