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