select t1.id from dbo.t1
where
id > @id and
(len(@str)=0 OR
(len(@str)>0 AND NOT
(CONTAINS(value1, @str)
OR CONTAINS(value2, @str)
)))
Суть такая: value1 и value2 - участвуют в полнотекстовом индексе.
И хотелось этим селектом выбрать записи у которых ид больше указанного и если задана строка поиска - искать ее в обеих полнотектстовых строках, а если нет - не искать вообще. @str естественно может быть пустой или не пустой, в том и задача
Так вот такой селект дает ошибку, почему?????
Server: Msg 7603, Level 15, State 1, Line 82
Syntax error in search condition, or empty or null search condition ''.
MS SQL Server: простой, казалось бы, селект, но!!!!
-
- Уже с Приветом
- Posts: 2489
- Joined: 04 Feb 2002 10:01
- Location: Слава Україні!
-
- Уже с Приветом
- Posts: 1917
- Joined: 08 Jul 2003 17:42
- Location: Canada
Re: MS SQL Server: простой, казалось бы, селект, но!!!!
Попробуй подставить функцию, которая возращает значение основного аргумента, если он не NULL, и значение другого аргумента, если основной NULL. В Oracle - это NVL, в MSSQL она, кажется, есть с таким-же или около того названием. Вот так примерно :
(NVL(@str,'XYZ')='XYZ' OR
(NVL(@str,'XYZ')<>'XYZ' AND NOT
(CONTAINS(value1, NVL(@str,'XYZ'))
OR CONTAINS(value2,NVL(@str,'XYZ'))
)))
Вместо XYZ поставить что угодно по вкусу, что явно не встречается в value1\2.
Все это, если у тебя пустая строка = NULL, а не прообел.
(NVL(@str,'XYZ')='XYZ' OR
(NVL(@str,'XYZ')<>'XYZ' AND NOT
(CONTAINS(value1, NVL(@str,'XYZ'))
OR CONTAINS(value2,NVL(@str,'XYZ'))
)))
Вместо XYZ поставить что угодно по вкусу, что явно не встречается в value1\2.
Все это, если у тебя пустая строка = NULL, а не прообел.
Дочки rulezzz !
-
- Уже с Приветом
- Posts: 1407
- Joined: 07 Jan 2003 19:51
- Location: НорКа
Re: MS SQL Server: простой, казалось бы, селект, но!!!!
RGoo wrote:Попв MSSQL она, кажется, есть с таким-же или около того названием...
isNull()
Однако, оно будет ругаться и если в @str только стоп-слово, типа "and". Можно попробовать взять содержимое двойные кавычки, select @str='"'+@str+'"'
Вот тут все эти фокусы написаны
http://msdn.microsoft.com/library/defau ... o_2y2h.asp