MS SQL Server: простой, казалось бы, селект, но!!!!

User avatar
Win32nipuh
Уже с Приветом
Posts: 2489
Joined: 04 Feb 2002 10:01
Location: Слава Україні!

MS SQL Server: простой, казалось бы, селект, но!!!!

Post by Win32nipuh »

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 ''.
User avatar
RGoo
Уже с Приветом
Posts: 1917
Joined: 08 Jul 2003 17:42
Location: Canada

Re: MS SQL Server: простой, казалось бы, селект, но!!!!

Post by RGoo »

Попробуй подставить функцию, которая возращает значение основного аргумента, если он не 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, а не прообел.
Дочки rulezzz !
Слiн
Уже с Приветом
Posts: 1407
Joined: 07 Jan 2003 19:51
Location: НорКа

Re: MS SQL Server: простой, казалось бы, селект, но!!!!

Post by Слiн »

RGoo wrote:Попв MSSQL она, кажется, есть с таким-же или около того названием...


isNull()

Однако, оно будет ругаться и если в @str только стоп-слово, типа "and". Можно попробовать взять содержимое двойные кавычки, select @str='"'+@str+'"'

Вот тут все эти фокусы написаны

http://msdn.microsoft.com/library/defau ... o_2y2h.asp

Return to “Вопросы и новости IT”