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

Откуда: Киев
Сообщений: 98
День добрый!

Подскажите, пожалуйста, есть ли какой-либо способ объеденить несколько однотипных комманд в одну? - т.е., чтобы в результате была одна общая результирующая таблица. Например:

select name, email from users where id = 1;
select name, email from users where id = 2;
select name, email from users where id = 3;
select name, email from users where id = 4;
select name, email from users where id = 5;
......
select name, email from users where id = 57;
select name, email from users where id = 58;
select name, email from users where id = 59;
.......


Т.е., как видите, комманды абсолютно одинаковы по своей структуре, исполняются быстро. Но, если обращение к SQL Server'у идет, скажем, через интерфейс .NET:

using(SqlCommand cmd = new SqlCommand(...)){
  .........
};


то получается, что для выполнения каждой комманды прийдётся создавать новую и новую инстанцию SqlCommand - что накладно с точки зрения рессурсов.

В общем, вопрос мой прост - есть ли альтернатива?

Спасибо.
7 фев 13, 01:27    [13888046]     Ответить | Цитировать Сообщить модератору
 Re: Замена однотипных запросов единым  [new]
=)8)
Guest
select name, email from users where id between 1 and 5 or id in (57,58,59)
7 фев 13, 01:38    [13888058]     Ответить | Цитировать Сообщить модератору
 Re: Замена однотипных запросов единым  [new]
roman_lenko
Member

Откуда: Киев
Сообщений: 98
Спасибо. Судя по всему, я недостаточно правильно описал ситуацию.

Идентификаторы(id) не обязательно идут по порядку, т.е. может быть как:

select name, email from users where id = 1;
select name, email from users where id = 8;
select name, email from users where id = 9;
select name, email from users where id = 27;
select name, email from users where id = 643;
select name, email from users where id = 47;
....


Поэтому BETWEEN, как я понимаю, не подходит.
7 фев 13, 01:44    [13888063]     Ответить | Цитировать Сообщить модератору
 Re: Замена однотипных запросов единым  [new]
LenaV
Member

Откуда: USA
Сообщений: 6796
UNION подходит?
7 фев 13, 02:12    [13888083]     Ответить | Цитировать Сообщить модератору
 Re: Замена однотипных запросов единым  [new]
qwerty112
Guest
roman_lenko
Спасибо. Судя по всему, я недостаточно правильно описал ситуацию.

Идентификаторы(id) не обязательно идут по порядку, т.е. может быть как:
...

нее, это тебе скорее всего "недошло"

тут, тебе нужно смотреть, на это
=)8)
select name, email from users where id between 1 and 5 or id in (57,58,59)

т.е. в своём "интерфейс .NET" - формируеш динамически строку запроса,
где в секции where id in (57,58,59), в IN будут перечисленны все нужные тебе ID
7 фев 13, 02:26    [13888094]     Ответить | Цитировать Сообщить модератору
 Re: Замена однотипных запросов единым  [new]
roman_lenko
Member

Откуда: Киев
Сообщений: 98
select name, email from users where id between 1 and 5 or id in (57,58,59)


Ok - а зачем тогда условие "between 1 and 5 or"?
7 фев 13, 17:02    [13892702]     Ответить | Цитировать Сообщить модератору
 Re: Замена однотипных запросов единым  [new]
П-Л
Guest
roman_lenko
Спасибо. Судя по всему, я недостаточно правильно описал ситуацию.

Идентификаторы(id) не обязательно идут по порядку, т.е. может быть как:

select name, email from users where id = 1;
select name, email from users where id = 8;
select name, email from users where id = 9;
select name, email from users where id = 27;
select name, email from users where id = 643;
select name, email from users where id = 47;
....


Поэтому BETWEEN, как я понимаю, не подходит.

Вот этот вот перечень (1, 8, 9, ...) должен быть в таблице ВыбранныеСКакой-тоЦельюАйдишники. Тогда все сводится к простейшему джоину.
7 фев 13, 17:05    [13892735]     Ответить | Цитировать Сообщить модератору
 Re: Замена однотипных запросов единым  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
roman_lenko,
передавайте табличную переменную серверу со всеми ид которые вам нужны, а сервер пускай вам резалсет возвращает. Это для 2008 сервера.
Для более ранних версий можно xml с идишками или список значений в строку, которые потом в процедуре разобрать и получить ту же таблицу с нужными ид. Ну вот примерно так.
7 фев 13, 17:35    [13892968]     Ответить | Цитировать Сообщить модератору
 Re: Замена однотипных запросов единым  [new]
leov
Member

Откуда: С-Петербург
Сообщений: 616
roman_lenko,
у вас вероятно какая-то проблема с архитектурой
я вот не представляю чтобы мне вот такое понадобилось писать
ну может инсерты бы я из экселевой таблицы генерил для заливки в таблицу
а вот конкретно такую кучу селектов....
вопрос - откуда все эти id взялись то?
если они из клиентской программы то закручиваете на клиенте цикл и генерите все эти селекты вставляя туда нужные id
если id растут из другой таблицы тут же в базе то надо с ней джойнить и одним селектом все сразу доставать
если хочется выпендрится можно и на стороне сервера цикл while закрутить и в нем собирать динамически эти селекты и исполнять через exec
вот тот ваш using....... это в принципе то самое и будет только не на sql написаное а на чем там у вас клиент
но вопрос - откуда вы те id возмете и как в тот using... воткнете?
.........
7 фев 13, 17:56    [13893158]     Ответить | Цитировать Сообщить модератору
 Re: Замена однотипных запросов единым  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
leov
закручиваете на клиенте цикл и генерите все эти селекты вставляя туда нужные id
.........

это уж лучше на сервер таблицу или список значений передавать чем таким заниматься.
7 фев 13, 18:00    [13893182]     Ответить | Цитировать Сообщить модератору
 Re: Замена однотипных запросов единым  [new]
leov
Member

Откуда: С-Петербург
Сообщений: 616
Мистер Хенки
leov
закручиваете на клиенте цикл и генерите все эти селекты вставляя туда нужные id
.........

это уж лучше на сервер таблицу или список значений передавать чем таким заниматься.
ничем это не хуже и не лучше если ресурсов достаточно и тормозов нет
по месту надо оценивать
7 фев 13, 18:08    [13893229]     Ответить | Цитировать Сообщить модератору
 Re: Замена однотипных запросов единым  [new]
ambarka_max
Member

Откуда: Россия
Сообщений: 517
leov
... проблема с архитектурой то?
.........

+1 Мужики поддерживают. Вам нужно самим найти у себя в базе такой признак, который объединяет нужные для запроса id одним параметром.
7 фев 13, 18:14    [13893259]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить