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

Откуда:
Сообщений: 47
Есть таблица, запрос из нее:
select RowId
from tbl
выводит порядка 10млн строк, запрос длится почти 3 минуты.
Даю возможность пользователю делать такой запрос:
select RowId
from tbl
where RowId like @a
@a - входной параметр в процедуре
Если пользователь введет айдишник, то запрос будет меньше секунды. Если же введет % - 3 минуты.
Как запретить такую возможность?
Думаю можно оценить кол-во выводимых строк, т.е.
select count(*)
from Nomens
where NomenId like '%'
делается 6 секунд - лучше, но все же думаю можно что-то придумать, чтобы быстрее можно было оценить кол-во строк.
Что можно сделать?
30 окт 09, 13:01    [7861692]     Ответить | Цитировать Сообщить модератору
 Re: Узнать кол-во выводимых строк  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36803
Заменить like на =.
30 окт 09, 13:02    [7861698]     Ответить | Цитировать Сообщить модератору
 Re: Узнать кол-во выводимых строк  [new]
newman123
Member

Откуда:
Сообщений: 47
Гавриленко Сергей Алексеевич
Заменить like на =.


Нужно применять именно like, т.к. пользователь должен иметь возможность ввести что-то вроде
'1111%' и получить список, скажем из 100 строк - это допустимо.
Главное запретить возможность ему получить список из 100000 строк.
30 окт 09, 13:09    [7861760]     Ответить | Цитировать Сообщить модератору
 Re: Узнать кол-во выводимых строк  [new]
Saller
Member

Откуда: exUSSR
Сообщений: 1141
newman123
Гавриленко Сергей Алексеевич
Заменить like на =.


Нужно применять именно like, т.к. пользователь должен иметь возможность ввести что-то вроде
'1111%' и получить список, скажем из 100 строк - это допустимо.
Главное запретить возможность ему получить список из 100000 строк.

А если по условия как раз и будет 100000 строк он что не имеет право их получить?
30 окт 09, 13:12    [7861784]     Ответить | Цитировать Сообщить модератору
 Re: Узнать кол-во выводимых строк  [new]
Glory
Member

Откуда:
Сообщений: 104760
newman123
Гавриленко Сергей Алексеевич
Заменить like на =.


Нужно применять именно like, т.к. пользователь должен иметь возможность ввести что-то вроде
'1111%' и получить список, скажем из 100 строк - это допустимо.
Главное запретить возможность ему получить список из 100000 строк.

Ну так пишите процедуру, которая будет проводить анализ параметра
30 окт 09, 13:12    [7861794]     Ответить | Цитировать Сообщить модератору
 Re: Узнать кол-во выводимых строк  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
SET ROWCOUNT 99999;
???
Версия сервера какая?

Оценить, какое количество записей вернёт сервер для произвольного запроса ДО выполнения этого запроса невозможно. IMHO
30 окт 09, 13:13    [7861799]     Ответить | Цитировать Сообщить модератору
 Re: Узнать кол-во выводимых строк  [new]
Saller
Member

Откуда: exUSSR
Сообщений: 1141
newman123,

Если есть возможно предоставь пользователю право задавать сколько строк ему вывести то можно сделать так:
--@CountRow - пользователь сам задаст сколько ему вывести строк 10 или 10 млн.
select TOP (@CountRow) RowId
from tbl
where RowId like @a
30 окт 09, 13:20    [7861862]     Ответить | Цитировать Сообщить модератору
 Re: Узнать кол-во выводимых строк  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Saller
newman123,

Если есть возможно предоставь пользователю право задавать сколько строк ему вывести то можно сделать так:
--@CountRow - пользователь сам задаст сколько ему вывести строк 10 или 10 млн.
select TOP (@CountRow) RowId
from tbl
where RowId like @a
А версию уже назвали? Где?
30 окт 09, 13:22    [7861888]     Ответить | Цитировать Сообщить модератору
 Re: Узнать кол-во выводимых строк  [new]
newman123
Member

Откуда:
Сообщений: 47
iap
SET ROWCOUNT 99999;
???
Версия сервера какая?

Оценить, какое количество записей вернёт сервер для произвольного запроса ДО выполнения этого запроса невозможно. IMHO


Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86) Oct 14 2005 00:33:37 Copyright (c) 1988-2005 Microsoft Corporation Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 1)
30 окт 09, 13:24    [7861914]     Ответить | Цитировать Сообщить модератору
 Re: Узнать кол-во выводимых строк  [new]
newman123
Member

Откуда:
Сообщений: 47
Saller
newman123
Гавриленко Сергей Алексеевич
Заменить like на =.


Нужно применять именно like, т.к. пользователь должен иметь возможность ввести что-то вроде
'1111%' и получить список, скажем из 100 строк - это допустимо.
Главное запретить возможность ему получить список из 100000 строк.

А если по условия как раз и будет 100000 строк он что не имеет право их получить?


Не имеет, т.е. в процедуре я задаю порог на 10000 строк. И если пользователь этот порог превысил, ему нужно об этом сказать.
30 окт 09, 13:26    [7861930]     Ответить | Цитировать Сообщить модератору
 Re: Узнать кол-во выводимых строк  [new]
newman123
Member

Откуда:
Сообщений: 47
iap
Saller
newman123,

Если есть возможно предоставь пользователю право задавать сколько строк ему вывести то можно сделать так:
--@CountRow - пользователь сам задаст сколько ему вывести строк 10 или 10 млн.
select TOP (@CountRow) RowId
from tbl
where RowId like @a
А версию уже назвали? Где?


Так конечно можно сделать, но нужно вывести еще сообщение был ли достигнут этот ТОП @CountRow
30 окт 09, 13:27    [7861948]     Ответить | Цитировать Сообщить модератору
 Re: Узнать кол-во выводимых строк  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
newman123
iap
Saller
newman123,

Если есть возможно предоставь пользователю право задавать сколько строк ему вывести то можно сделать так:
--@CountRow - пользователь сам задаст сколько ему вывести строк 10 или 10 млн.
select TOP (@CountRow) RowId
from tbl
where RowId like @a
А версию уже назвали? Где?


Так конечно можно сделать, но нужно вывести еще сообщение был ли достигнут этот ТОП @CountRow
А @@ROWCOUNT после SELECTа сравнить с порогом не судьба?
30 окт 09, 13:29    [7861964]     Ответить | Цитировать Сообщить модератору
 Re: Узнать кол-во выводимых строк  [new]
Glory
Member

Откуда:
Сообщений: 104760
newman123

Так конечно можно сделать, но нужно вывести еще сообщение был ли достигнут этот ТОП @CountRow

Как вам уже сказали, узнать заранее количество возращаемых запросом записей нельзя
После выполнения запроса вы можете сравнить системную переменную @@ROWCOUNT с вашей @CountRow
30 окт 09, 13:30    [7861984]     Ответить | Цитировать Сообщить модератору
 Re: Узнать кол-во выводимых строк  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Не говоря уже о том, что клиентские компоненты доступа к данным, например, ADO, имеют средства, дающие информацию о количестве записей в DataSet
30 окт 09, 13:32    [7862008]     Ответить | Цитировать Сообщить модератору
 Re: Узнать кол-во выводимых строк  [new]
newman123
Member

Откуда:
Сообщений: 47
iap
newman123
iap
Saller
newman123,

Если есть возможно предоставь пользователю право задавать сколько строк ему вывести то можно сделать так:
--@CountRow - пользователь сам задаст сколько ему вывести строк 10 или 10 млн.
select TOP (@CountRow) RowId
from tbl
where RowId like @a
А версию уже назвали? Где?


Так конечно можно сделать, но нужно вывести еще сообщение был ли достигнут этот ТОП @CountRow
А @@ROWCOUNT после SELECTа сравнить с порогом не судьба?


А ну точно, как раз то, что надо!
Всем большое спасибо)
30 окт 09, 13:37    [7862071]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить