处理freetext上的空值

时间:2015-07-16 17:00:03

标签: sql-server-2008 tsql 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或空的全文谓词。

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

附加说明

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

也会抛出错误

2 个答案:

答案 0 :(得分:1)

<强>更新

试试这个:

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

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

旧答案:

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

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

答案 1 :(得分:1)

来自Zohar的更新声明似乎正在起作用..我刚刚在下面添加了一个声明声明:

声明@Name varchar(20)=''
  设置@Name = ISNULL(NULLIF(@ Name,''),'');   从作者中选择Author_id   其中freetext(*,@ Name)