Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

База данни на Windows Azure SQL - Колоната за автоматично нарастване на самоличността пропуска стойности

Тук може да нямате късмет, ако трябва да премахнете тези пропуски.

Самият аз срещнах този проблем, докато разработвам/тествам ново приложение. Интуитивно разбирам какво се случва тук в sql azure въз основа на това, което съм чел за sql server 2012. Не успях да намеря никаква документация за това за sql azure.

От това, което прочетох, това е функция, която изглежда като грешка IMO. В Sql сървър 2012 Microsoft добави възможността за създаване на последователности. Последователностите записват какви стойности са били използвани в блокове от 1000. Така че да кажем, че вашата последователност напредва... 1, 2, 3, 4, 5... и след това вашият sql сървър се рестартира. Е, последователността вече е запазила факта, че блокът 1-1000 вече е бил използван, така че ви прехвърля към следващите 1000.... така че следващата ви стойност е 1001, 1002, 1003, 1004.... Това подобрява производителността на вмъква при използване на последователности, но може да доведе до необичайни пропуски. Има решение за това за вашата последователност. Когато указвате вашата последователност, добавете параметъра "NOCACHE", така че да не записва блокове от 1000 наведнъж. Вижте тук за повече документация.

Когато това се превръща в проблем е, че колоните за идентичност изглежда са променени, за да използват същата парадигма. Така че, когато вашият сървър или в този случай вашият sql azure екземпляр се рестартира, можете да получите големи пропуски (1000) в колоните си за самоличност, защото кешира големи блокове като „използвани“. Има решение за това за sql сървър 2012. Можете да посочите стартов флаг t272, за да върнете самоличността си към използване на старата парадигма на sql сървър 2008 r2. Проблемът е, че не знам (може да не е възможно) как да посоча това в sql Azure. Не мога да намеря документация. Вижте тази тема за повече подробности относно sql сървър 2012.

Проверете документацията за самоличност тук в msdn. По-конкретно раздела „Последователни стойности след рестартиране на сървъра или други повреди“. Ето какво пише:

Така че, ако трябва да имате последователни стойности, можете да опитате да посочите последователност с nocache, вместо да разчитате на вашата колона за самоличност. Аз самият не съм пробвал това, но изглежда, че ще имате проблеми да накарате това да работи с рамката на обекта.

Съжалявам, ако това не помага много, но поне е малко информация за това, което изпитвате.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Най-елегантният начин за генериране на пермутации в SQL сървър

  2. sp_add_schedule срещу sp_add_jobschedule в SQL Server:Каква е разликата?

  3. Какво не е наред с sp_rename с колона?

  4. възстановяването на база данни е неуспешно с преместване

  5. Как да получа стойности на параметри за заявка на SQL Server в SQL Server Profiler