sql-server - 7645 空全文谓词

标签 sql-server full-text-search

我有一个查询在 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/

相关文章:

sql - 基于层次结构的透视数据

c# - 如何在数据库中存储和访问 session

sql - MSSQL 备份 - 我可以编写一个脚本来检查备份前数据库是否已被修改吗?

ruby-on-rails - 有没有办法将 facets 与 pg_search gem 一起使用

php - 我如何使用全文,例如 Like

sql-server - 存储过程与表值函数的 OUTPUT 子句

sql-server - MSSQL - 如何在批量插入中设置默认值?

Postgresql - 全文搜索索引 - 意外的查询结果

mysql - 全文搜索添加与其他表的关系但返回 0 个结果

postgresql - 如何让 postgresql 文本搜索在排名中使用搜索词顺序