全文检索:返回了意外的 '[FULLTEXT:mytable].KEY' 列值 NULL
具体提示:
务器: 消息 7342,级别 16,状态 1,行 1
返回了意外的 '[FULLTEXT:mytable].KEY ' 列值 NULL(从 OLE DB 提供程序 'Full-text Search Engine ' 中)。此列不能是 NULL。
OLE DB 错误跟踪[Non-interface error: Unexpected NULL value returned for the column: ProviderName= 'Full-text Search Engine ', TableName= '[FULLTEXT:mytable] ', ColumnName= 'KEY ']。
---------------------------
1、mytable是启用全文检索的表
2、mytable表中不存在错误提示中的“KEY”列
3、全文检索服务启动时,曾提示缺少NTLMSSP服务,并且该服务并没有出现在服务列表中。后从另一台机器导注册表添加NTLMSSP服务
4、查询语句:select Title from mytable where contains(title, ' "北京* " ')
原因及解决方法?
------解决方案--------------------用select * from containstable(mytable,title, ' "北京* " ')试一下,
还有,你的title是全文索引列吗?
------解决方案--------------------select Title from mytable where contains(title, ' "北京 " ')--去掉*
或
select Title from mytable where contains(title, ' "北京% " ')--用%
------解决方案--------------------怀疑
全文检索服务启动时,曾提示缺少NTLMSSP服务,并且该服务并没有出现在服务列表中。后从另一台机器导注册表添加NTLMSSP服务
这个地方出错了,如果有环境在别人机器上测一下。
------解决方案--------------------用select Title from mytable where Title is null or Title= ' '
看看结果
------解决方案--------------------列的属性是不是text...
用FULLTEXT这个函数试试
------解决方案--------------------select Title from mytable where contains(title,N ' "北京 " ')--加个N试试
或
select Title from mytable where contains(title,N ' "北京% " ')--加个N试试
FREETEXT
是个谓词,用于搜索含有基于字符的数据类型的列,其中的值符合在搜索条件中所指定文本的含义,但不符合表达方式。使用 FREETEXT 时,全文查询引擎内部将 freetext_string 拆分为若干个搜索词,并赋予每个词以不同的加权,然后查找匹配。
语法
FREETEXT ( { column | * } , 'freetext_string ' )
参数
column
已经注册全文检索的特定列的名称。具有字符串数据类型的列是可进行全文检索的有效的列。
*
指定所有已注册用于全文检索的列均用于搜索给定的 freetext_string。
freetext_string
要在指定的 column 中进行搜索的文本。可以输入任何文本,包括单词、短语或句子。所输入的文本与语法无关。
USE Northwind
GO
SELECT CategoryName
FROM Categories
WHERE FREETEXT (Description, 'sweetest candy bread and dry meat ' )
------解决方案--------------------全文索引有没有启动自动填充
------解决方案--------------------根据提示:
此列不能是 NULL?
楼主检查一下主键是否存在null
--有没有记录显示
select * from ta where 主键 is null
------解决方案--------------------[KEY]--这是全文索引对应的表主键
可以这样对应查询:
USE Northwind
GO
SELECT K.RANK, CompanyName, ContactName, Address
FROM Customers AS C
INNER JOIN
CONTAINSTABLE(Customers,Address, 'ISABOUT ( "des* ",
Rue WEIGHT(0.5),
Bouchers WEIGHT(0.9)
)
'
) AS K
ON C.CustomerID = K.[KEY]