|
Вставка нескольких записей одним запросом
|
|||
---|---|---|---|
#18+
Имеется таблицы: 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), только что поставить вместо многоточия? Заранее спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2001, 16:23 |
|
Вставка нескольких записей одним запросом
|
|||
---|---|---|---|
#18+
надо заменить тип поля [number] c int на uniqueidentifier. После чего можно писать: insert queue (number,n_member,mess) select newid(),n_member,@mess from kart where n_group=@ngroup ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2001, 16:32 |
|
Вставка нескольких записей одним запросом
|
|||
---|---|---|---|
#18+
А если нельзя менять тип, тогда никак? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2001, 16:55 |
|
Вставка нескольких записей одним запросом
|
|||
---|---|---|---|
#18+
Если задача позволяет, то можно изменить кластерный индекс в таблице queue. Для этого к таблице queue добавить столбец с именем ID и типом uniqueidentifier и default newid(). Затем выполнить команду update queue set id=newid(). После чего в таблице queue удалить старый кластерный индекс и создать новый кластерный индекс по двум полям id и number. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2001, 19:16 |
|
Вставка нескольких записей одним запросом
|
|||
---|---|---|---|
#18+
А автоинкрементацию на number тоже нельзя? Если можно, то тогда предыдущего товарища чуть правим и вперед: insert queue (n_member,mess) select n_member,@mess from kart where n_group=@ngroup ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2001, 18:18 |
|
Вставка нескольких записей одним запросом
|
|||
---|---|---|---|
#18+
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-й. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2001, 09:39 |
|
|
start [/forum/topic.php?fid=46&msg=32002208&tid=1827278]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
28ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 249ms |
total: | 377ms |
0 / 0 |