SQL Server 2008在具有复合主键的表上进行全文搜索

时间:2010-02-23 01:34:39

标签: 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

我收到以下错误:

  

“'PK__MESSAGES__C87C0C9C1EC32C6A'不是强制执行的有效索引   全文搜索键。全文搜索键必须是唯一的,   未定义的非可空的单列索引(未脱机)   在非确定性或不精确的非持久计算列上,确实如此   没有过滤器,最大大小为900字节。选择其他   全文密钥的索引。“

这意味着我无法在具有复合主键的表中使用全文搜索?或者我做错了什么?

2 个答案:

答案 0 :(得分:9)

我认为错误信息很清楚,不是吗?

  

PK_MESSAGES_C87C0C9C1EC32C6A不是   一个有效的索引来强制执行全文   搜索键。全文搜索键   必须是独特的,不可为空的,   单列索引哪个不是   离线,未在a上定义   不确定或不精确   非持久计算列,没有   有过滤器,最大尺寸为   900字节。选择另一个索引   全文密钥。“

如果您的索引不是唯一的,不是非可空的,而不是单列,则它不能用于全文索引。

  

这意味着我无法使用完整版   在具有复合的表中搜索文本   主键?或者我在做什么   错?

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

正如Remus指出的那样 - 它永远不会说它必须是主键索引!如果表中有其他非可空和唯一字段,则可以在该字段上使用唯一索引。您甚至可以只在表格中添加一个INT IDENTITY(1,1)字段,并在该字段上放置一个UNIQUE INDEX,您就应该好了。

答案 1 :(得分:5)

  

全文搜索键必须是a   独特的,不可空的,单列   不是脱机的索引,不是   在非确定性或   不精确的非人工计算机   列,没有过滤器,和   最大大小为900字节。

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