2013-09-04 2 views
0

Я попытаюсь объяснить простым языком, не учитывая, почему и как это происходило.Идентификационный столбец SQL Server и импорт

В настоящее время существует 2 базы данных, которые необходимо объединить, они имеют одинаковые таблицы и т. Д., А в некоторых случаях таблицы поиска идентичны, в некоторых случаях они есть, а в некоторых случаях записи в одной базе данных имеют разные значения идентичности, в другой БД. Так что это беспорядок.

Скажем, в одной из баз данных мы обновляем все значения идентификаторов, добавляя к ним 10 000 и обновляя связанные записи. Затем мы могли бы импортировать данные как есть, и да, в некоторых случаях поисковые запросы будут иметь одинаковое значение дважды с разными идентификаторами.

Вопрос не будет касаться вышеуказанного беспорядка :). Я хочу знать, что после повторного включения столбца идентификации мы будем иметь начальные значения

1,2,3,4,5 и т. Д. И 10001, 10002, 10003 и т. Д. Если должно быть добавлено больше строк, и они продолжаются, давайте просто скажем 9999 будет ли идентификационный столбец использовать 10 000, а затем 10,004 или SQL Server будет жаловаться на следующую вставку, что значение идентификатора уже используется?

ответ

0

Я просто проверил это с простой ВСТАВИТЬ: вы должны отключить IDENTITY_INSERT сначала для каждой таблицы, которую вы хотите импортировать данные

SET IDENTITY_INSERT table OFF 

Затем вы можете вставить данные с их значениями столбцов исходной личности (которые вы будете необходимо для того, чтобы сохранить ссылки правильно)

После

SET IDENTITY_INSERT table ON 

SQL Server продолжает последовательность с наивысшим Eleme nt плюс один, поэтому в вашем случае (после вставки идентификаторов 10001, 10002, 10003) он будет продолжаться с 10004.

+0

Спасибо, я тоже сделаю аналогичный тест. Я ценю ваше усилие там, я должен был просто сделать то же самое, извините. – user174634

0

Важно понимать, что, хотя они часто появляются вместе, IDENTITY и PRIMARY KEY два ортогональных понятия . Так, на вопрос, как спросил, ответ - нет, в IDENTITY колонке будет вполне счастливо обеспечить значение, которое уже было использовано в той же колонке:

set nocount on 
go 
create table II (
    ID int IDENTITY(1,1) not null, 
    Value varchar(10) not null 
) 
insert into II(Value) values ('abc'),('def') 
set identity_insert II on 
insert into II(ID,Value) values (6,'ghi') 
set identity_insert II off 
select * from II 
insert into II(Value) values ('jkl') 
select * from II 
GO 
dbcc checkident (II, RESEED, 5); 
GO 
insert into II(Value) values ('mno'),('pqr') 
select * from II 

Результаты:

ID   Value 
----------- ---------- 
1   abc 
2   def 
6   ghi 

ID   Value 
----------- ---------- 
1   abc 
2   def 
6   ghi 
7   jkl 

Checking identity information: current identity value '7'. 
DBCC execution completed. If DBCC printed error messages, contact your system administrator. 
ID   Value 
----------- ---------- 
1   abc 
2   def 
6   ghi 
7   jkl 
6   mno 
7   pqr 

В то время как PRIMARY KEY будет жаловаться, если вы попытаетесь вставить повторяющееся значение:

create table III (
    ID int IDENTITY(1,1) not null PRIMARY KEY, 
    Value varchar(10) not null 
) 
insert into III(Value) values ('abc'),('def') 
set identity_insert III on 
insert into III(ID,Value) values (6,'ghi') 
set identity_insert III off 
select * from III 
insert into III(Value) values ('jkl') 
select * from III 
GO 
dbcc checkident (III, RESEED, 5); 
GO 
insert into III(Value) values ('mno'),('pqr') 
select * from III 
go 

(только отличается от предыдущего сценария имя таблицы и добавление PRIMARY KEY)

Результаты:

ID   Value 
----------- ---------- 
1   abc 
2   def 
6   ghi 

ID   Value 
----------- ---------- 
1   abc 
2   def 
6   ghi 
7   jkl 

Checking identity information: current identity value '7'. 
DBCC execution completed. If DBCC printed error messages, contact your system administrator. 
Msg 2627, Level 14, State 1, Line 1 
Violation of PRIMARY KEY constraint 'PK__III__3214EC27FCCBBCB7'. Cannot insert duplicate key in object 'dbo.III'. The duplicate key value is (6). 
The statement has been terminated. 
ID   Value 
----------- ---------- 
1   abc 
2   def 
6   ghi 
7   jkl 

Третья концепция, которая часто сплавлены с этими двумя является то, что Индекса кластерном. Вполне возможно, что таблица имеет первичный ключ, столбец идентификатора и кластерный индекс, которые не имеют общих столбцов.

+0

Спасибо за информацию, которая была очень полезной – user174634

Смежные вопросы