Kin показав вам, як можна скинути значення IDENTITY, але поза середовищем розробки, коли ви дійсно видаляєте всі дані, навіщо це потрібно робити?
Я сподіваюся, що ви не збираєтесь підтримувати суміжну послідовність значень IDENTITY під час виробництва. І я сподіваюся, що ви насправді не пишете свій код для жорсткого кодування значень IDENTITY. Якщо це значущі значення ідентифікатора, то вам слід припинити використання властивості IDENTITY.
Є кілька речей, які заважають цьому не статися:
- якщо значення IDENTITY присвоюється під час транзакції, а транзакція повертається назад, значення не "повертається назад", і наступним значенням буде те, яке ніколи не використовується + 1.
- якщо рядок буде видалено пізніше, IDENTITY ніколи не повернеться, щоб заповнити прогалини.
- в SQL Server 2012 є активна помилка, яка
не буде виправлена, поки SQL Server 2014 ніколи не буде виправлено (якщо ви не використовуєте недокументований і дуже дорогий прапор сліду), завдяки чому перезапуск буде видаляти до 1000 значень із стовпця ІДЕНТИМЕТНОСТІ . Помилка підключення дозволяє припустити, що це обмежено випадками аварійних ситуацій, що включають групи доступності, але я можу запевнити, що помилка набагато ширша за це.
Якщо коротко, якщо вам важливо прогалини або хочете надати цим значенням конкретний сенс, перестаньте використовувати IDENTITY. Видаліть та заново створіть таблицю, і коли вам потрібно буде видалити значення та повторно заповнити, або виконайте оновлення, або виконайте вставку із твердо кодованими значеннями для цього стовпця.
Убік, первинний ключ та особистість - це не одне і те ж. Стовпець ідентичності не є первинним ключем, якщо ви чітко не визначите його як такий, і ви, безумовно, можете мати первинний ключ, який не є стовпцем ідентичності.