sql >> Database teknologi >  >> RDS >> Sqlserver

Windows Azure SQL Database - Identitet Automatisk inkrementkolonne springer værdier over

Du kan være uheldig her, hvis du har brug for at fjerne disse huller.

Jeg ramte selv dette problem, da jeg udvikler/tester en ny applikation. Jeg forstår, hvad der sker her i sql azure baseret på, hvad jeg har læst om sql server 2012. Jeg har ikke været i stand til at finde nogen dokumentation om dette for sql azure.

Fra hvad jeg har læst er dette en funktion, der kommer til at virke som en fejl IMO. I SQL server 2012 tilføjede Microsoft muligheden for at oprette sekvenser. Sekvenser registrerer, hvilke værdier der er blevet brugt i blokke af 1000. Så lad os sige, at din sekvens gik fremad... 1, 2, 3, 4, 5... og derefter genstarter din sql-server. Sekvensen har allerede reddet det faktum, at blokken 1-1000 allerede er blevet brugt, så den springer dig til de næste 1000.... så din næste værdi er 1001, 1002, 1003, 1004.... Dette forbedrer ydeevnen af indsætter ved brug af sekvenser, men kan resultere i usædvanlige huller. Der er en løsning på dette for din sekvens. Når du angiver din sekvens, tilføj "NOCACHE" parameteren, så den ikke gemmer blokke på 1000 ad gangen. Se her for mere dokumentation.

Hvor dette bliver et problem, er, at identitetskolonnerne ser ud til at være blevet ændret til at bruge det samme paradigme. Så når din server, eller i dette tilfælde din sql azure-instans genstarter, kan du få store huller (1000'er) i dine identitetskolonner, fordi den cacher store blokke som "brugt". Der er en løsning på dette til sql server 2012. Du kan angive et startflag t272 for at vende din identitet tilbage til at bruge det gamle sql server 2008 r2 paradigme. Problemet er, at jeg ikke er klar over (det er muligvis ikke muligt), hvordan man angiver dette i sql Azure. Kan ikke finde dokumentation. Se denne tråd for flere detaljer om sql server 2012.

Tjek dokumentationen for identitet her i msdn. Specifikt afsnittet "Fortløbende værdier efter servergenstart eller andre fejl". Her er, hvad der står:

Så hvis du skal have fortløbende værdier, kan du prøve at angive en sekvens med nocache i stedet for at stole på din identitetskolonne. Har ikke prøvet dette selv, men det lyder som om du vil have problemer med at få dette til at fungere med entity framework.

Beklager, hvis dette ikke hjælper meget, men det er i det mindste nogle oplysninger om, hvad du oplever.



  1. Hvordan ATAN() virker i MariaDB

  2. Sådan konverteres talformat af en beregnet kolonne til tidsformat (tt:mm:ss), sql-forespørgsel

  3. MySQL INNER JOIN vælg kun én række fra den anden tabel

  4. fuldCalendar begivenheder post metode til MySQL