2013-09-12 8 views
-1

Предполагая, что у меня пустой стол «TABLE_1». Затем я использую;SQL Расчет первичного ключа (автоинкремент)

SET IDENTITY_INSERT TABLE_1 ON 

для ввода некоторых данных (включая первичный ключ).

Впоследствии я деактивирую IDENTITY_INSERT и хочу вставить другие значения (путь по умолчанию, то есть без первичного ключа). Как SQL рассчитать новое значение первичного ключа? Является ли это что-то вроде:

MAX(ID) + 1 

Заранее спасибо
Eugen

+4

Это намного сложнее **, чем это! И не используйте этот подход 'MAX() + 1' самостоятельно - это не совместимо с параллелизмом **, и вы получите дубликаты! –

+5

Этот вопрос выглядит не по теме, потому что речь идет о внутренней детали реализации, о которой вам следует беспокоиться. Обычно, когда кто-то задает такой вопрос, они спрашивают о некоторых деталях воспринимаемого решения проблемы. Возможно, вам лучше сообщить нам о реальной проблеме, которую вы пытаетесь решить. –

ответ

1

Я сделал некоторые испытания:

CREATE TABLE tmp.test (
    ID INT IDENTITY PRIMARY KEY, 
    val NVARCHAR(255) 
) 

INSERT INTO tmp.test (val) values ('run_1.1') 

SET IDENTITY_INSERT tmp.test ON 
INSERT INTO tmp.test (ID, val) values 
(112, 'run_2.1'), (2, 'run_2.2'), (45, 'run_2.3') 
SET IDENTITY_INSERT tmp.test OFF 

INSERT INTO tmp.test (val) values ('run_3.1'), ('run_3.2') 

select * from tmp.test 

Результат:

ID val 
1 run_1.1 
2 run_2.2 
45 run_2.3 
112 run_2.1 
113 run_3.1 
114 run_3.2 

Это означает, что не требуется reseed :-), что здорово.

PS: Я использую SQL Server 2008

+0

Полезно знать. Просто узнал что-то новое! – cbeckner

0

Взятые из документации SQL Server:

http://technet.microsoft.com/en-us/library/ms188059.aspx

Если значение вставлено больше, чем текущее значение идентичности для таблицы, SQL Server автоматически использует новое вставленное значение в качестве текущего значения идентификатора.

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