Вставка нескольких записей одним запросом

Sergey
Дата: 13.02.2001 16:23:09
Имеется таблицы:
kart (n_group int,n_member int)
queue (number int,n_member int,mess varchar(255))

В таблице queue по полю number организован уникальный кластерный индекс.

Задача:
Имея значение @n_group и @mess, выбрать все значения n_member из таблицы kart, соответствующие n_group=@ngroup, и вставить в queue все выбранные n_member и @mess, не нарушая уникальности number, не прибегая к курсорам и временным таблицам, потому что при большом количестве записей из kart такая конструкция будет сильно притормаживать.
Что-то типа insert queue (select .... from kart where n_group=@ngroup), только что поставить вместо многоточия?
Заранее спасибо.
VadimB
Дата: 13.02.2001 16:32:38
надо заменить тип поля [number] c int на uniqueidentifier.
После чего можно писать:
insert queue (number,n_member,mess)
select newid(),n_member,@mess
from kart
where n_group=@ngroup
Sergey
Дата: 13.02.2001 16:55:38
А если нельзя менять тип, тогда никак?
VadimB
Дата: 13.02.2001 19:16:22
Если задача позволяет,
то можно изменить кластерный индекс в таблице queue.

Для этого к таблице queue добавить столбец с именем ID и типом uniqueidentifier и default newid().
Затем выполнить команду update queue set id=newid().
После чего в таблице queue удалить старый кластерный индекс и
создать новый кластерный индекс по двум полям id и number.
Banditos
Дата: 01.03.2001 18:18:53
А автоинкрементацию на number тоже нельзя?
Если можно, то тогда предыдущего товарища чуть правим и вперед:

insert queue (n_member,mess)
select n_member,@mess
from kart
where n_group=@ngroup
SergSuper
Дата: 02.03.2001 09:39:41
1. Можно сделать поле queue.number как identity
2. Можно написать триггер на вставку для queue. Что нибудь типа
create trigger ti_queue on queue for insert
declare @m int
select @m=max(number) from queue (holdlock)
update queue set number=@m=@m+1
where number is null

1-й вариант конечно лучше. Но если не хочется менять тип поля, то можно 2-й.