我有一个在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将忽略双引号,并且不会引发错误。

例如,以下代码实际上将返回“用户”表中的所有记录:

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 Null或空的全文谓词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/189765/

10-12 18:22