powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вставка нескольких записей одним запросом
6 сообщений из 6, страница 1 из 1
Вставка нескольких записей одним запросом
    #32002202
Sergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется таблицы:
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), только что поставить вместо многоточия?
Заранее спасибо.
...
Рейтинг: 0 / 0
Вставка нескольких записей одним запросом
    #32002206
VadimB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
надо заменить тип поля [number] c int на uniqueidentifier.
После чего можно писать:
insert queue (number,n_member,mess)
select newid(),n_member,@mess
from kart
where n_group=@ngroup
...
Рейтинг: 0 / 0
Вставка нескольких записей одним запросом
    #32002208
Sergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А если нельзя менять тип, тогда никак?
...
Рейтинг: 0 / 0
Вставка нескольких записей одним запросом
    #32002217
VadimB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если задача позволяет,
то можно изменить кластерный индекс в таблице queue.

Для этого к таблице queue добавить столбец с именем ID и типом uniqueidentifier и default newid().
Затем выполнить команду update queue set id=newid().
После чего в таблице queue удалить старый кластерный индекс и
создать новый кластерный индекс по двум полям id и number.
...
Рейтинг: 0 / 0
Вставка нескольких записей одним запросом
    #32002661
Banditos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А автоинкрементацию на number тоже нельзя?
Если можно, то тогда предыдущего товарища чуть правим и вперед:

insert queue (n_member,mess)
select n_member,@mess
from kart
where n_group=@ngroup
...
Рейтинг: 0 / 0
Вставка нескольких записей одним запросом
    #32002676
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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-й.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вставка нескольких записей одним запросом
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]