【发布时间】:2014-08-18 20:22:49
【问题描述】:
我有一个用于搜索的存储过程,它带有几个可选参数。其中之一是@keywords 定义为
@keywords nvarchar(1000) = null,
如果@keywords为null或空字符串,我想短路,否则我需要搜索全文索引。我以前的逻辑是这样的:
WHERE
(@keywords IS NULL OR CONTAINS( (Title, CrossRef, company_name), @keywords))
AND
-- other search terms
但是,我刚刚发现 OR 不能保证短路,所以有时这会返回“空全文谓词”的错误。显然 CASE 应该保证短路,但是某些版本的 SQL server 有一个错误,情况并非如此。
这是我正在尝试的:
WHERE
(1 = CASE
WHEN @keywords IS NULL THEN 1
WHEN @keywords = '""' THEN 1
ELSE (CASE WHEN CONTAINS( (Title, CrossRef, company_name), @keywords) THEN 1 ELSE 0 END)
)
AND
-- other search terms
这仍然给出“空全文谓词”错误。我很乐意将 @keywords 替换为始终匹配的内容,但我也不知道该怎么做。
【问题讨论】:
标签: sql-server