Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 12359|Svare: 1

[Kilde] SQL Server 2012 auto-vokser kolonner med verdihopp-problemer

[Kopier lenke]
Publisert på 23.08.2018 12:03:06 | | | |
Introduksjon

Fra og med SQL Server 2012-utgivelsene, når SQL Server-instansen startes på nytt, hopper verdien av den automatiske vekstkolonnen i tabellen, og den spesifikke hoppverdien bestemmes av datatypen i vekstkolonnen. Hvis datatypen er int, er hoppverdien 1000, og hvis datatypen er bigint, er hoppverdien 10000. Fra vårt prosjekt er denne typen hoppeproblem uakseptabelt, spesielt når det vises på klientsiden. Dette merkelige problemet finnes kun i SQL Server 2012 og senere, og det finnes ikke i versjoner før SQL Server 2012.


bakgrunn

For noen dager siden foreslo en kollega fra vårt QA-team: Verdien av den selvøkende kolonnen på bordet vårt hoppet uforklarlig med 10 000. Med andre ord, den siste verdien i den selvinkrementerende kolonnen i tabellen vår var 2200, men nå som vi har lagt til en ny post, har verdien av den selvinkrementerende kolonnen blitt 12200. I vår forretningslogikk er slike situasjoner ikke tillatt på klienten, så vi må løse dette problemet.


Bruk av kode

Først var vi alle veldig merkelige, hvordan skjedde dette? Vi setter vanligvis ikke inn noen verdier manuelt i selvforsterkende kolonner (det er greit å sette inn verdier manuelt i selvoppblåsende kolonner), og verdiene til selvoppblåsende kolonner vedlikeholdes av databasen selv. Et medlem av kjerneteamet vårt begynte å undersøke dette spørsmålet og fant svaret. Nå vil jeg gjerne forklare dette problemet i detalj og løsningen kollegaen min fant.


Hvordan gjenskape denne feilen


Du må installere SQL Server 2012 og deretter opprette en testdatabase. Opprett deretter en tabell med selvvoksende kolonner:
Nå sett inn to databiter:

Gå gjennom resultatene:






På dette tidspunktet var resultatet det samme som vi forventet. Nå starter du SQL Server-tjenesten din på nytt. Det finnes flere måter å starte SQL Service på nytt, og her bruker vi SQL Server Manager for å starte det på nytt:



Etter omstart setter vi inn 2 nye datastykker i tabellen nettopp:



Gå gjennom resultatene:




Nå ser du resultatene etter omstart av SQL Server 2012, og de selvøkende kolonneverdiene starter på 1002. Det vil si, hoppet 1000. Som nevnt tidligere, hvis datatypen vi legger til er bigint, vil hoppverdien være 10 000.


Er det virkelig en BUG?

Microsoft sier at dette er en funksjon, ikke en feil, og at det er nyttig i mange situasjoner. Men i vårt tilfelle trenger vi ikke en slik funksjon, fordi disse selv-inkrementelle dataene er ment å vises til kundene, og kundene vil føle seg rare hvis de ser slik hoppende data. Og hoppverdien bestemmes av hvor mange ganger du starter SQL Server på nytt. Hvis disse dataene ikke vises til kundene, kan det være akseptabelt. Derfor er denne funksjonen vanligvis kun egnet for intern bruk.



løsning

Hvis vi ikke er interessert i denne "funksjonen" som Microsoft tilbyr, finnes det to måter vi kan slå den av på.

1. Bruk av sekvenser

2. Registrer oppstartsparameteren -t272 for SQL Server



Bruk sekvenser

Først må vi fjerne de selvøkende kolonnene i tabellen. Deretter oppretter du en sekvens uten caching, hvorfra de numeriske verdiene settes inn. Her er eksempelkoden:


Registrer oppstartsparameteren -t272

Åpne SQL Server Configuration Manager. Velg din SQL Server 2012-instans, høyreklikk og velg menyen Egenskaper. Finn oppskytingsparametrene i popup-vinduet og registrer -t272. Etter ferdigstillelse, start SQL Server (SQLSERVER2012) i figuren nedenfor på nytt, og utfør deretter feilgjengivelsesoperasjonen for å verifisere om problemet er løst.




Ytterligere notater:

Hvis du har mange selvoppblåsende tabeller i databasen din og de alle har numeriske hoppproblemer, er det bedre å bruke det andre alternativet. Fordi det er veldig enkelt og omfanget er servernivå. Å ta i bruk den andre løsningen vil påvirke alle databaser på denne tjenesteinstansen.





Foregående:Webserveren returnerer statuskodetypen og betydningen
Neste:Oppdater operasjonsmetoden for den selvvoksende ID-kolonnen i SQL Server-databasen
 Vert| Publisert på 08.07.2020 15:15:52 |
SQL Server-funksjoner i høyere versjoner. Den "bufrer" 1000 identifikasjonsverdier på forhånd av ytelsesmessige årsaker
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com