在表或索引视图上不能使用CONTAINS或FREETEXT谓词,因为它不是全文索引
我在我的SQL Server 2008 R2数据库中出现以下错误:
不能在表或索引视图'tblArmy'上使用
CONTAINS
或FREETEXT
谓词,因为它没有全文索引。
-
确保安装了全文searchfunction。
-
创build全文search目录。
use AdventureWorks create fulltext catalog FullTextCatalog as default select * from sys.fulltext_catalogs
-
创build全文search索引。
create fulltext index on Production.ProductDescription(Description) key index PK_ProductDescription_ProductDescriptionID
在创build索引之前,请确保:
– 由于在表格上只允许有一个全文search索引,因此表格上没有全文search索引
– 表格中存在唯一的索引。 该索引必须基于单键列,不允许NULL。
– 全文目录存在。 如果没有默认全文目录,则必须明确指定全文目录名称。
您可以在SQL Sever Management Studio中执行第2步和第3步。 在对象浏览器中,右键单击表格,selectFull-Text index
菜单项,然后Define Full-Text Index...
子菜单项。 全文索引向导将指导您完成整个过程。 如果您还没有,也会为您创build一个全文search目录。
你可以在MSDNfind更多信息
CONTAINS
的解决方法:如果您不想在列上创build全文索引,并且性能不是您的优先事项之一,则可以使用不需要任何预先configuration的LIKE
语句:
例如:查找包含该字母的所有产品问:
SELECT ID, ProductName FROM [ProductsDB].[dbo].[Products] WHERE [ProductsDB].[dbo].[Products].ProductName LIKE '%Q%'
您必须在需要使用CONTAINS
查询的数据库的所有表上定义Full-Text-Index
,这将需要一些时间。
相反,只需使用LIKE
为您提供即时结果,而无需调整表格的任何设置。
例:
SELECT * FROM ChartOfAccounts WHERE AccountName LIKE '%Tax%'
使用LIKE
可以获得与CONTAINS
相同的结果。
看结果:
您可能需要启用全文索引表 。
您必须在您要search的特定字段上添加全文索引。
ALTER TABLE news ADD FULLTEXT(headline, story);
其中“新闻”是你的桌子和“标题,故事”领域,你不会启用全文search
还有一个解决scheme将列全文设置为true。
这些解决scheme,例如没有为我工作
ALTER TABLE news ADD FULLTEXT(headline, story);
我的解决scheme
- 右键单击表格
- devise
- 右键点击你想编辑的列
- 全文索引
- 加
- 关
- 刷新
下一步
- 右键单击表格
- devise
- 点击你想编辑的列
- 在mssql的底部,会出现选项卡“列属性”
- 全文指定 – >(全文索引)设置为true。
刷新
版本的mssql 2014