我有一个查询在 SQL2005 上运行良好,但将数据库移至 SQL2008 却出现了标题中的错误。
有问题的代码是使用空参数调用 CONTAINS、CONTAINSTABLE 或 FREETEXT。但是,我尝试仅在存在此类值时才调用或加入
where (@search_term = '' or (FREETEXT(lst.search_text, @search_term)))
或
left join containstable (listing_search_text, search_text, @search_term) ftb on l.listing_id = ftb.[key]
and len(@search_term) > 0
但是我找不到任何解决方法可以使其在 SQL2008 上运行。有什么想法吗?
我知道我可以执行动态 SQL 或使用具有两种不同情况的 if 语句(使用 FT 连接进行选择,不使用 FT 连接进行选择。有不需要这样做的更好的解决方法吗?
最佳答案
今天,我在将自己的数据库从 SQL 2005 转换为 SQL 2008 时找到了这个问题的答案。
为您的搜索词传递 ""
并将 @search_term = ''
测试更改为 @search_term = '""'
SQL Server 将忽略双引号并且不会抛出错误。
例如,以下命令实际上会返回 Users 表中的所有记录:
declare @SearchTerm nvarchar(250)
SET @SearchTerm = '""'
select UserId, U.Description, U.UserName
from dbo.Users U
WHERE ((@SearchTerm = '""') OR CONTAINS( (U.Description, U.UserName), @SearchTerm))
如果您使用 .Net,您可能会获取 E. W. Bachtal 的 FullTextSearch 类的副本。他的网站信息非常丰富:http://ewbi.blogs.com/develops/
关于sql-server - 7645 空全文谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/189765/