0

我正在尝试使用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)

但我仍然得到

消息 7645,级别 15,状态 2,第 3 行 Null 或空的全文谓词。

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

附加说明

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

也抛出和错误

4

2 回答 2

1

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

声明@Name varchar(20) = ''
设置@Name = ISNULL(NULLIF(@Name, ''), ''); 选择 Author_id from Author where freetext(*,@Name)

于 2015-07-17T08:27:28.673 回答
1

更新

尝试这个:

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

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

较旧的答案:

一种选择是使用 nullif 将空字符串转换为 null,然后使用 isnull 将 null 转换为具有单个空格的字符串。

SELECT ID
FROM dbo.Data
WHERE FREETEXT(*, isnull(nullif(@Name, ''), ' '))
于 2015-07-16T19:14:08.287 回答