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

Откуда:
Сообщений: 79
Коллеги, помогите советом. Есть таблица фактов (упрощено):
FACTID (Primary_Key, int, not null) , Product(varchar 255), PACS(float).

У FACTID (int) в спецификации идентификатора-идентификатор значение “нет” и приращения на 1 тоже нет. (Поставить приращение в свойствах этого столбца таблицы не получается, так как в ней уже много данных)
В эту таблицу раньше данные грузились при помощи SAP DATA SERVICES и его средствами заполнялся столбец FACTID (int). Сейчас нет возможности им воспользоваться и нужно загрузить данные при помощи SSIS пакета.
Мне нужно заполнить FACTID (int) для новой порции данных взяв max FACTID (int) из массива данных, что уже есть в таблице фактов и прибавить единицу к FACTID в каждой строке нового массива данных.

Как это сделать?
10 мар 16, 12:08    [18914755]     Ответить | Цитировать Сообщить модератору
 Re: Вставка ID в ключевой столбец MS SQL 2008 R2  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
пронумеруйте результат и добавте свое мах ИД
10 мар 16, 12:12    [18914788]     Ответить | Цитировать Сообщить модератору
 Re: Вставка ID в ключевой столбец MS SQL 2008 R2  [new]
Владислав Колосов
Member

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

автор
Поставить приращение в свойствах этого столбца таблицы не получается, так как в ней уже много данных

Не получится почему? Причём здесь "много данных"?
10 мар 16, 12:16    [18914803]     Ответить | Цитировать Сообщить модератору
 Re: Вставка ID в ключевой столбец MS SQL 2008 R2  [new]
Glory
Member

Откуда:
Сообщений: 104760
ondorsal
Как это сделать?

Заливаете свой "массив данных" в промежуточную(временную) таблицу с автоинкрементным полем
Вставляете данные из промежуточной таблицы в таблицу фактов, прибавляя к щначению автоинкрементного поля результат select max(FACTID) from <таблице фактов>
10 мар 16, 12:20    [18914834]     Ответить | Цитировать Сообщить модератору
 Re: Вставка ID в ключевой столбец MS SQL 2008 R2  [new]
ondorsal
Member

Откуда:
Сообщений: 79
Владислав Колосов,
"Поставить приращение в свойствах этого столбца таблицы не получается, так как в ней уже много данных". Когда я это делаю SQL SERVER думает, а потом пишет, что истекло время ожидания и не сохраняет изменения.
10 мар 16, 12:45    [18915008]     Ответить | Цитировать Сообщить модератору
 Re: Вставка ID в ключевой столбец MS SQL 2008 R2  [new]
Glory
Member

Откуда:
Сообщений: 104760
ondorsal
Когда я это делаю SQL SERVER думает, а потом пишет, что истекло время ожидания и не сохраняет изменения.

Это не SQL server пишет.
Это ваша утилита пишет.
В которой вы выставили лимит на время выполнения запросов
10 мар 16, 12:47    [18915027]     Ответить | Цитировать Сообщить модератору
 Re: Вставка ID в ключевой столбец MS SQL 2008 R2  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4271
ondorsal
Поставить приращение в свойствах этого столбца таблицы не получается, так как в ней уже много данных...

Как это сделать?


Попробуйте задать начально значение при автонумерации FACTID большим максимального значения из этого поля.
10 мар 16, 12:48    [18915035]     Ответить | Цитировать Сообщить модератору
 Re: Вставка ID в ключевой столбец MS SQL 2008 R2  [new]
ondorsal
Member

Откуда:
Сообщений: 79
Glory
ondorsal
Как это сделать?

Заливаете свой "массив данных" в промежуточную(временную) таблицу с автоинкрементным полем
Вставляете данные из промежуточной таблицы в таблицу фактов, прибавляя к значению автоинкрементного поля результат select max(FACTID) from <таблице фактов>


Я так и делаю в поле "начальное значение идентификатора" пишу запрос select max(FACTID) from Имя таблицы фактов. Но он ругается, что там должно быть число не более 10 знаков, а не текст запроса. Или Вы имели ввиду вручную посчитать MAX(FACTID) и записать его как начальное значение идентификатора? Можно ли как-то автоматизировать этот процесс.....переменную какую-нибудь
объявить и в SSIS пакет ее вставить?
10 мар 16, 12:53    [18915067]     Ответить | Цитировать Сообщить модератору
 Re: Вставка ID в ключевой столбец MS SQL 2008 R2  [new]
Владислав Колосов
Member

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

Сервис-параметры - где-то там таймаут настраивается для конструктора.
10 мар 16, 12:54    [18915073]     Ответить | Цитировать Сообщить модератору
 Re: Вставка ID в ключевой столбец MS SQL 2008 R2  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4271
Identity Insert = 1
Identity Seed = максимальное значение + 1

Какие проблемы?
10 мар 16, 12:54    [18915077]     Ответить | Цитировать Сообщить модератору
 Re: Вставка ID в ключевой столбец MS SQL 2008 R2  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4271
ondorsal
Или Вы имели ввиду вручную посчитать MAX(FACTID) и записать его как начальное значение идентификатора?

Именно так.



ondorsal
Можно ли как-то автоматизировать этот процесс.....переменную какую-нибудь
объявить и в SSIS пакет ее вставить?

Для какой цели? У вас много таких таблиц?
10 мар 16, 12:56    [18915094]     Ответить | Цитировать Сообщить модератору
 Re: Вставка ID в ключевой столбец MS SQL 2008 R2  [new]
Glory
Member

Откуда:
Сообщений: 104760
ondorsal
Я так и делаю в поле "начальное значение идентификатора" пишу запрос select max(FACTID) from Имя таблицы фактов.

Вы делаете совсем не то, что я предложил

ondorsal
Но он ругается, что там должно быть число не более 10 знаков, а не текст запроса.

И вы удивляетесь, почему текст " select max(FACTID) from Имя таблицы фактов" не является числом ?

ondorsal
Или Вы имели ввиду вручную посчитать MAX(FACTID) и записать его как начальное значение идентификатора?

Ну можете не вручную

ondorsal
Можно ли как-то автоматизировать этот процесс.....переменную какую-нибудь
объявить и в SSIS пакет ее вставить?

Можно все это сделать в одном шаге/запросе. Без всяких переменных.
10 мар 16, 12:57    [18915104]     Ответить | Цитировать Сообщить модератору
 Re: Вставка ID в ключевой столбец MS SQL 2008 R2  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4271
ondorsal
Можно ли как-то автоматизировать этот процесс.....?

В душу мне закралось страшное подозрение...
Уж не решили ли вы, что эту операцию нужно будет делать для каждой записи????
10 мар 16, 13:04    [18915140]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить