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