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

Откуда: Гондурас
Сообщений: 1034
Уважаемый форум,

Задача: из таблицы 1 необходимо вставить записи в таблицу 2, одновременно найдя максимальное значение в поле Ч таблицы 2 и увеличивая значение этого поля для каждой вставляемой записи на 1.

Пример для понимания: таблица 2 содержит 10 записей со значениями в поле Ч от 1 до 10. Из таблицы 1 вставляем (в таблицу 2) 15 записей, для которых поле Ч таблицы 2 должно содержать значения по порядку с 11 до 25 соответственно.

Вопрос: как это реализовать в одной СКЛ-строке, если максимальное значение поля Ч таблицы 2 меняется постоянно? Спасибо заранее!
7 фев 12, 19:00    [12049743]     Ответить | Цитировать Сообщить модератору
 Re: Вставить записи с учетом значения в поле  [new]
iljy
Member

Откуда:
Сообщений: 8711
IFK,

определяете максимум функцией MAX, затем рассчитываете следующие значения через ROW_NUMBER. Но вообще для таких вещей лучше использовать IDENTITY.
7 фев 12, 19:14    [12049796]     Ответить | Цитировать Сообщить модератору
 Re: Вставить записи с учетом значения в поле  [new]
IFK
Member

Откуда: Гондурас
Сообщений: 1034
iljy
IFK,

определяете максимум функцией MAX, затем рассчитываете следующие значения через ROW_NUMBER. Но вообще для таких вещей лучше использовать IDENTITY.


А можно пример или где почитать? Про MAX понятно, но вот как его и последующий расчет через ROW_NUMBER в одной строке соединить... :-(

Да уж, IDENTITY было бы в самый раз, но база, в которую нужно вставлять записи, не моя и менять тип поля никто не будет и мне не даст. А там такого наворочено, что лучше извернуться, чем приводить все в порядок.
7 фев 12, 19:23    [12049826]     Ответить | Цитировать Сообщить модератору
 Re: Вставить записи с учетом значения в поле  [new]
iljy
Member

Откуда:
Сообщений: 8711
IFK
iljy
IFK,

определяете максимум функцией MAX, затем рассчитываете следующие значения через ROW_NUMBER. Но вообще для таких вещей лучше использовать IDENTITY.


А можно пример или где почитать? Про MAX понятно, но вот как его и последующий расчет через ROW_NUMBER в одной строке соединить... :-(

А что мешает соединить?

IFK
Да уж, IDENTITY было бы в самый раз, но база, в которую нужно вставлять записи, не моя и менять тип поля никто не будет и мне не даст. А там такого наворочено, что лучше извернуться, чем приводить все в порядок.

Использование такого метода очень рисковано, потому что могут возникнуть проблемы с параллельной вставкой.
7 фев 12, 19:31    [12049842]     Ответить | Цитировать Сообщить модератору
 Re: Вставить записи с учетом значения в поле  [new]
IFK
Member

Откуда: Гондурас
Сообщений: 1034
iljy
IFK
пропущено...


А можно пример или где почитать? Про MAX понятно, но вот как его и последующий расчет через ROW_NUMBER в одной строке соединить... :-(

А что мешает соединить?

IFK
Да уж, IDENTITY было бы в самый раз, но база, в которую нужно вставлять записи, не моя и менять тип поля никто не будет и мне не даст. А там такого наворочено, что лучше извернуться, чем приводить все в порядок.

Использование такого метода очень рисковано, потому что могут возникнуть проблемы с параллельной вставкой.


Соединить никто не мешает. Я с таким еще не сталкивался, поэтому и спрашиваю, как это делается. :-)

Проблем с параллельной вставкой не будет, потому что осуществляться такая вставка будет единовременно и одним человеком.
7 фев 12, 19:48    [12049899]     Ответить | Цитировать Сообщить модератору
 Re: Вставить записи с учетом значения в поле  [new]
iljy
Member

Откуда:
Сообщений: 8711
IFK,

declare @t table (id int)
insert @t
values (1),(2)

insert @t
select top(20) (select MAX(id) max_id from @t) + ROW_NUMBER() over(order by number) N
from master..spt_values

select * from @t
7 фев 12, 19:52    [12049918]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить