2016-07-21 3 views
1

Я работаю над проектом для консолидации данных (из двух разных БД). Я создал таблицу, которая содержит несколько столбцов:неавтоматический столбец auto increment

  • MAPPING_ID INT
  • ContentID INT
  • ContentValue VARCHAR (200)

Для примера, когда я делаю 1-й набор вставок против исходный источник данных - все хорошо.

Mapping_ID: 53 
ContentID: 53 
ContentValue: Original Data 1 

Mapping_ID: 54 
ContentID: 54 
ContentValue: Original Data 2 

Но когда я делаю второй набор вставок против другого источника (данные, которые я пытаюсь объединить) Я хотел бы столбец Mapping_ID, чтобы перейти к следующему номеру (т.е. 55,56,57. ..)

Я просмотрел функцию row_number, но это начинается с 1. Есть ли способ запустить его на 55?

Я полагаю, что я мог бы сделать столбец Mapping_ID полем Identity, но отключить его во время первой вставки, а затем заселить его максимальным значением (54), а затем включить его во время второй вставки.

Есть ли другой способ достичь этого?

+0

Какая СУБД вы используете? – Nicarus

+0

@Nicarus - SQL Server – webdad3

+0

Какая версия SQL Server? –

ответ

1

Чтобы получить row_number() начать в 55, вы можете просто добавить 54 (или любой другой номер) для row_number() расчета:

(row_number() over (partition by Y order by X)) + 54 
+1

Незначительное редактирование, но я предполагаю, что 'partition by' должен прийти до' order by' ... – sgeddes

+0

@sgeddes oops, я всегда забываю об этом. Благодарю. – Blorgbeard

2

В SQL Server 2012+, вы можете использовать SEQUENCE объекты для заполнения нетождественности столбцы с значениями автоинкремента. Кроме того, вы можете использовать одну и ту же последовательность SEQUENCE для разных таблиц, чтобы сделать пронумеруцию нумерации и получить значения из последовательностей в запросах SELECT и UPDATE.

Во-первых, создать последовательность:

CREATE SEQUENCE SchemaName.SequenceName 
START WITH 1 
INCREMENT BY 1 ; 

Затем создайте DEFAULT ограничение с values from sequence на требуемой колонке:

ALTER TABLE tableName ADD CONSTRAINT constraint_unique_name DEFAULT NEXT VALUE FOR SchemaName.SequenceName FOR Mapping_ID; 
+0

Интересно. Спасибо за информацию. – webdad3

1

Там на самом деле совершенно новый способ сделать такого рода вещи, как в SQL Server 2012: объект последовательности. Мне жаль, что я не могу написать процедуру для вас, поскольку я работаю в мире MySQL в настоящее время, но ее очень легко реализовать. Основная идея заключается в том, что вы поддерживаете отдельный объект базы данных с собственным количеством семян и приростом, но есть некоторые предостережения, которые следует учитывать в отношении их отличия от традиционных значений идентичности (например, их можно перезаписать), поэтому убедитесь, что вы делаете некоторые исследование.

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

https://msdn.microsoft.com/en-us/library/ff878091.aspx

https://msdn.microsoft.com/en-us/library/ff878370.aspx

Успехов!

+0

Спасибо за информацию! Я проверю это. – webdad3