处理自由文本上的空值

Handling nulls on freetext

我正在尝试使用 FREETEXT。 @name 字段通常有空值,这不是程序中的错误。这只是意味着正在使用其他搜索方法。

原来我有

DECLARE @Name varchar(50) = ... -- some value which many be NULL or blank

SELECT ID 
FROM dbo.Data WITH (NOLOCK) 
WHERE  FREETEXT(*, @Name)

我试过了

DECLARE @Name varchar(50) = ... -- some value which many be NULL or blank

SELECT ID 
FROM dbo.Data WITH (NOLOCK) 
WHERE @Name IS NOT NULL AND  FREETEXT(*, @Name)

但我还是得到了

Msg 7645, Level 15, State 2, Line 3 Null or empty full-text predicate.

解决这个问题的好方法是什么?

补充说明

SELECT ID 
FROM dbo.data WITH (NOLOCK) 
WHERE FREETEXT(*, ' ')

也会抛出错误

更新

试试这个:

SET @Name = ISNULL(NULLIF(@Name, ''), '<null>');

SELECT ID
FROM dbo.Data
WHERE FREETEXT(*, @Name)

较早的回答:

一个选项是使用 nullif 将空字符串转换为 null,然后使用 isnull 将 null 转换为具有单个 space.

的字符串
SELECT ID
FROM dbo.Data
WHERE FREETEXT(*, isnull(nullif(@Name, ''), ' '))

Zohar 的更新声明似乎有效。我刚刚在下面添加了声明声明:

声明@Name varchar(20) = ''
设置@Name = ISNULL(NULLIF(@Name, ''), ''); select Author_id 来自作者 其中 freetext(*,@Name)