我正在尝试将全文搜索工作在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字节。选择其他 全文密钥的索引。“
这意味着我无法在具有复合主键的表中使用全文搜索?或者我做错了什么?
答案 0 :(得分:9)
我认为错误信息很清楚,不是吗?
“
PK_MESSAGES_C87C0C9C1EC32C6A
不是 一个有效的索引来强制执行全文 搜索键。全文搜索键 必须是独特的,不可为空的, 单列索引哪个不是 离线,未在a上定义 不确定或不精确 非持久计算列,没有 有过滤器,最大尺寸为 900字节。选择另一个索引 全文密钥。“
如果您的索引不是唯一的,不是非可空的,而不是单列,则它不能用于全文索引。
这意味着我无法使用完整版 在具有复合的表中搜索文本 主键?或者我在做什么 错?
不,正如错误所说 - 这种索引不起作用。期。没办法解决它。
正如Remus指出的那样 - 它永远不会说它必须是主键索引!如果表中有其他非可空和唯一字段,则可以在该字段上使用唯一索引。您甚至可以只在表格中添加一个INT IDENTITY(1,1)
字段,并在该字段上放置一个UNIQUE INDEX
,您就应该好了。
答案 1 :(得分:5)
全文搜索键必须是a 独特的,不可空的,单列 不是脱机的索引,不是 在非确定性或 不精确的非人工计算机 列,没有过滤器,和 最大大小为900字节。
请注意,它不必是主键(即表上的PRIMARY KEY约束)。非可空单列上的任何唯一索引都可以使用。如果您没有这样的列,请向表中添加标识列并为其添加索引,然后将此索引用于完整文本目录。