2008-10-22 2 views
3

Скажем, у меня есть таблица MSSQL с двумя столбцами: столбец идентификатора int, который является столбцом идентификации, а также другим столбцом datetime или любым другим. Скажем, таблица содержит 10 записей с идентификаторами 1-10. Теперь я удаляю запись с ID = 5.Вопрос о пропуске идентификаторов в столбце идентификации в MSSQL

Существуют ли какие-либо сценарии, в которых другая запись будет «заполнять», что отсутствует ID? То есть когда будет вставлена ​​запись и дана идентификатор 5?

ответ

7

Нет, если вы специально не включаете вставки для идентификации (как правило, при копировании таблиц с столбцами идентификации) и вставляете строку вручную с идентификатором 5. SQLServer отслеживает последнюю идентификацию, вставленную в каждую таблицу с столбцами идентификации, и увеличивает последнее вставленное значение, чтобы получить следующее значение для вставки.

2

Только если вы вручную отключить идентификаторы личности с помощью команды SET IDENTITY_INSERT, а затем сделать вставку с ID = 5

В противном случае MS-SQL всегда будет увеличиваться до большего числа и недостающие слоты никогда не использовать повторно.

0

Один из сценариев, о которых уже не упоминалось, когда другая запись будет «заполнять» отсутствующие значения IDENTITY, является повторной подачей ИДЕНТИФИКАЦИИ. Пример (SQL Server 2008):

CREATE TABLE Test 
(
    ID INTEGER IDENTITY(1, 1) NOT NULL, 
    data_col INTEGER NOT NULL 
); 

INSERT INTO Test (data_col) 
    VALUES (1), (2), (3), (4); 

DELETE 
    FROM Test 
WHERE ID BETWEEN 2 AND 3; 

DBCC CHECKIDENT ('Test', RESEED, 1) 

INSERT INTO Test (data_col) 
    VALUES (5), (6), (7), (8); 

SELECT T1.ID, T1.data_col 
    FROM Test AS T1 
ORDER 
    BY data_col; 

Результаты:

ID data_col 
1 1 
4 4 
2 5 
3 6 
4 7 
5 8 

Это показывает, что не только являются «дыры» заполняются новыми автоматически сгенерированных значений, значения, которые были ауто- сгенерированные до повторной подачи, и могут даже дублировать существующие значения IDENTITY.

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

  • Нет связанных вопросов^_^