Sql server SQL Server 2008对具有复合主键的表进行全文搜索
我尝试在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
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)
字段,并在该字段上放置一个唯一索引,这样就可以了。这正是我所期望的,我可能弄错了,因为复合主键仍然是唯一约束(但不是单列,这就是问题所在)。非常感谢,我刚刚创建了唯一字段,并使用=)