我正在尝试使用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(*, ' ')
也会抛出错误
答案 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)