处理自由文本上的空值
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)
我正在尝试使用 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)