Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Запрос поиска  [new]
serverokAsservelat
Member

Откуда:
Сообщений: 567
Подскажите, пожалуйста, почему следующий код хранимой процедуры выдает много лишних записей?
Задумка такая, посетитель сайта вводит искомое слово и это слово передается в качестве параметра @query в данную хранимую процедуру. А дальше пробегаемся по таблице article и ищем возможные вхождения искомого слова в полях title и body.

ALTER PROCEDURE dbo.SearchArticle
	@query nvarchar,
	@pageIndex  int = 0,
	@pageSize int = 10
AS
SET NOCOUNT ON
SELECT * FROM
(
	SELECT id, category, title, prebody, ROW_NUMBER() OVER (ORDER BY addDate DESC) AS RowNum FROM dbo.article WHERE title Like '%'+@query+'%' or body Like '%'+@query+'%'
) 
article
 WHERE article.RowNum BETWEEN
   (@pageIndex*@pageSize+1) AND ((@pageIndex+1)*@pageSize)
   ORDER BY addDate DESC
RETURN
Возможно, неправильно сформировано условие фильтра WHERE title Like '%'+@query+'%' or body Like '%'+@query+'%' ?
23 окт 09, 17:08    [7831360]     Ответить | Цитировать Сообщить модератору
 Re: Запрос поиска  [new]
serverokAsservelat
Member

Откуда:
Сообщений: 567
Забыл уточнить:

в выдаче присутствуют записи, в полях title и body которых нет ни одного вхождения искомого слова.
23 окт 09, 17:09    [7831366]     Ответить | Цитировать Сообщить модератору
 Re: Запрос поиска  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36827
@query nvarchar = @query nvarchar(1)
23 окт 09, 17:11    [7831386]     Ответить | Цитировать Сообщить модератору
 Re: Запрос поиска  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
serverokAsservelat
ALTER PROCEDURE dbo.SearchArticle
	@query nvarchar,
	@pageIndex  int = 0,
	@pageSize int = 10
Где размер? Размер где?
23 окт 09, 17:13    [7831397]     Ответить | Цитировать Сообщить модератору
 Re: Запрос поиска  [new]
serverokAsservelat
Member

Откуда:
Сообщений: 567
Я прошу прощения, а зачем размер. Во многих процедурах и без размера работает.
Имеете в виду, что размер конкретно в данном случае необходим, или всегда следует его жестко указывать?

Поймите правильно, всех тонкостей SQL не знаем, не наш профиль.
23 окт 09, 17:19    [7831437]     Ответить | Цитировать Сообщить модератору
 Re: Запрос поиска  [new]
Glory
Member

Откуда:
Сообщений: 104760
serverokAsservelat
Я прошу прощения, а зачем размер. Во многих процедурах и без размера работает.
Имеете в виду, что размер конкретно в данном случае необходим, или всегда следует его жестко указывать?

А вы не читали что ли описания типов вообще и nvarchar в частности ?


When n is not specified in a data definition or variable declaration statement, the default length is 1. When n is not specified with the CAST function, the default length is 30.

Сообщение было отредактировано: 23 окт 09, 17:22
23 окт 09, 17:21    [7831448]     Ответить | Цитировать Сообщить модератору
 Re: Запрос поиска  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36827
serverokAsservelat
Я прошу прощения, а зачем размер. Во многих процедурах и без размера работает.
Имеете в виду, что размер конкретно в данном случае необходим, или всегда следует его жестко указывать?

Поймите правильно, всех тонкостей SQL не знаем, не наш профиль.
В переменную @query без указания размера запишется не более одного символа. Так что идите проверяйте что где у вас и как работает.
23 окт 09, 17:21    [7831451]     Ответить | Цитировать Сообщить модератору
 Re: Запрос поиска  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
serverokAsservelat
Я прошу прощения, а зачем размер.
Ну если не читаете документацию так хоть попробуйте:
create procedure SearchArticle @query nvarchar as
begin
   select '*' + @query + '*' as result
end
go
exec SearchArticle 'hello, world'
go
drop procedure SearchArticle
go

result
------
*h*

(1 row(s) affected)
23 окт 09, 17:23    [7831466]     Ответить | Цитировать Сообщить модератору
 Re: Запрос поиска  [new]
serverokAsservelat
Member

Откуда:
Сообщений: 567
Ага, понял. Вопросов не имею. Теперь, значит, надо все свои хранимки проверить на выставленность для входных параметров размеров. Спасибо-спасибо!
23 окт 09, 17:24    [7831472]     Ответить | Цитировать Сообщить модератору
 Re: Запрос поиска  [new]
serverokAsservelat
Member

Откуда:
Сообщений: 567
Правда, всем спасибо, уже все работает и остальное проверяется.
Что приятно поразило, так это скорость ответов.

Топик закрываю, всем ещё раз спасибо
23 окт 09, 17:27    [7831494]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить