sql >> Databasteknik >  >> RDS >> Sqlserver

Windows Azure SQL Database - Identitet Automatisk inkrementkolumn hoppar över värden

Du kan ha tur här om du behöver eliminera dessa luckor.

Jag stötte på det här problemet själv när jag utvecklar/testar en ny applikation. Jag förstår vad som händer här i sql azure baserat på vad jag har läst om sql server 2012. Jag har inte kunnat hitta någon dokumentation om detta för sql azure.

Från vad jag har läst är detta en funktion som framstår som en bugg IMO. I SQL Server 2012 lade Microsoft till möjligheten att skapa sekvenser. Sekvenser registrerar vilka värden som har använts i block om 1000. Så låt oss säga att din sekvens fortskrider... 1, 2, 3, 4, 5... och sedan startar din sql-server om. Sekvensen har redan sparat det faktum att blocket 1-1000 redan har använts så det hoppar dig till nästa 1000... så ditt nästa värde är 1001, 1002, 1003, 1004.... Detta förbättrar prestandan för infogar när du använder sekvenser, men kan resultera i ovanliga luckor. Det finns en lösning på detta för din sekvens. När du anger din sekvens lägg till parametern "NOCACHE" så att den inte sparar block om 1000 åt gången. Se här för mer dokumentation.

Där detta blir ett problem är att identitetskolumnerna verkar ha ändrats för att använda samma paradigm. Så när din server, eller i det här fallet din sql azure-instans startar om kan du få stora luckor (1000-tal) i dina identitetskolumner eftersom den cachelagrar stora block som "använda". Det finns en lösning på detta för sql server 2012. Du kan ange en startflagga t272 för att återställa din identitet till att använda det gamla sql server 2008 r2 paradigmet. Problemet är att jag inte är medveten om (det kanske inte är möjligt) om hur man anger detta i sql Azure. Kan inte hitta dokumentation. Se den här tråden för mer information om sql server 2012.

Kontrollera identitetsdokumentationen här i msdn. Specifikt avsnittet "Konsekutiva värden efter omstart av servern eller andra fel". Så här står det:

Så om du behöver ha konsekutiva värden kan du försöka ange en sekvens med nocache istället för att förlita dig på din identitetskolumn. Har inte provat detta själv, men det låter som att du kommer att ha problem med att få detta att fungera med entity framework.

Ursäkta om detta inte hjälper så mycket, men det är åtminstone lite information om vad du upplever.



  1. OC4J 10.1.3.3 kan inte hitta ojms.rar inställning av databasbeständigheter

  2. Prognostisera tidsseriedata i Oracle/SQL

  3. 4 sätt att välja dubbletter av rader i PostgreSQL

  4. Hur man undviker tävlingskondition med unika kontroller i Django