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

Ton*_*ony 5 t-sql sql-server full-text-search primary-key sql-server-2008

我试图在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
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

"'PK__MESSAGES__C87C0C9C1EC32C6A'不是强制执行全文搜索键的有效索引.全文搜索键必须是唯一的,不可为空的单列索引,它不是脱机的,不是在非确定性上定义的或不精确的非持久计算列,没有过滤器,最大大小为900字节.为全文密钥选择另一个索引."

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

mar*_*c_s 9

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

" PK_MESSAGES_C87C0C9C1EC32C6A不是强制执行全文搜索键的有效索引.全文搜索键必须是唯一的,不可为空的单列索引,它不是脱机的,不是在非确定性或不精确的非持久性上定义的计算列,没有过滤器,最大大小为900字节.为全文键选择另一个索引."

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

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

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

正如Remus指出的那样 - 它永远不会说它必须是主要的索引!如果表中有其他非可空和唯一字段,则可以在该字段上使用唯一索引.你甚至可以简单地INT IDENTITY(1,1)在你的桌子上添加一个字段并放在UNIQUE INDEX那个单独的字段上,你应该好好去.


Rem*_*anu 5

全文搜索键必须是唯一的,不可为空的单列索引,该索引不脱机,未在非确定性或不精确的非持久计算列上定义,没有过滤器,最大大小为900字节.

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