Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 12359|Atsakyti: 1

[Šaltinis] "SQL Server 2012" automatinio augimo stulpeliai su reikšmių šuolio problemomis

[Kopijuoti nuorodą]
Paskelbta 2018-08-23 12:03:06 | | | |
Įvadas

Pradedant nuo "SQL Server 2012" leidimų, iš naujo paleidus "SQL Server" egzempliorių, lentelės automatinio augimo stulpelio reikšmė šokinėja, o konkreti šuolio reikšmė nustatoma pagal augimo stulpelio duomenų tipą. Jei duomenų tipas yra int, šuolio reikšmė yra 1000, o jei duomenų tipas yra bigint, šuolio reikšmė yra 10000. Mūsų projekte tokia šokinėjimo problema yra nepriimtina, ypač kai rodoma kliento pusėje. Ši keista problema yra tik "SQL Server 2012" ir naujesnėse versijose, o ankstesnėse "SQL Server 2012" versijose jos nėra.


fonas

Prieš kelias dienas kolega iš mūsų QA komandos pasiūlė: Mūsų lentelės savaime didėjančio stulpelio vertė nepaaiškinamai šoktelėjo 10 000. Kitaip tariant, paskutinė lentelės savaime didinančio stulpelio reikšmė buvo 2200, bet dabar, kai įtraukėme naują įrašą, savaime didinamo stulpelio reikšmė tapo 12200. Pagal mūsų verslo logiką, tokios situacijos klientui neleidžiamos, todėl turime išspręsti šią problemą.


Kodo naudojimas

Iš pradžių mes visi buvome labai keisti, kaip tai atsitiko? Paprastai rankiniu būdu neįterpiame jokių reikšmių į savaime didėjančius stulpelius (rankiniu būdu įterpti reikšmes į savaime išpučiamus stulpelius yra gerai), o savaime išpučiamų stulpelių reikšmes prižiūri pati duomenų bazė. Mūsų pagrindinės komandos narys pradėjo tyrinėti šį klausimą ir rado atsakymą. Dabar norėčiau išsamiai paaiškinti šią problemą ir sprendimą, kurį rado mano kolega.


Kaip atkurti šią klaidą


Turėsite įdiegti SQL Server 2012 ir sukurti bandomąją duomenų bazę. Tada sukurkite lentelę su savaime augančiais stulpeliais:
Dabar įterpkite du duomenis:

Peržiūrėkite rezultatus:






Šiuo metu rezultatas buvo toks pat, kokio tikėjomės. Dabar iš naujo paleiskite SQL serverio paslaugą. Yra keli būdai, kaip iš naujo paleisti SQL paslaugą, ir čia mes naudojame SQL serverio tvarkyklę, kad ją paleistume iš naujo:



Paleidę iš naujo, į lentelę įterpiame dar 2 duomenų vienetus:



Peržiūrėkite rezultatus:




Dabar matote rezultatus iš naujo paleidę "SQL Server 2012", o jo savaime didėjančios stulpelio reikšmės prasideda nuo 1002. Tai yra, šoktelėjo 1000. Kaip minėta anksčiau, jei pridedame duomenų tipą bigint, jo šuolio vertė bus 10 000.


Ar tai tikrai klaida?

"Microsoft" teigia, kad tai yra funkcija, o ne klaida ir yra naudinga daugeliu atvejų. Tačiau mūsų atveju mums tokios funkcijos nereikia, nes šie savaiminiai duomenys yra skirti parodyti klientams, o klientai jausis keistai, jei pamatys tokius šokinėjančius duomenis. O šuolio reikšmė nustatoma pagal tai, kiek kartų iš naujo paleidžiate SQL serverį. Jei šie duomenys nerodomi klientams, jie gali būti priimtini. Todėl ši funkcija paprastai tinka tik vidiniam naudojimui.



sprendimas

Jei mūsų nedomina ši "Microsoft" siūloma "funkcija", yra du būdai, kaip ją išjungti.

1. Sekų naudojimas

2. Užregistruokite SQL serverio paleisties parametrą -t272



Sekų naudojimas

Pirmiausia turime pašalinti savaime didėjančius lentelės stulpelius. Tada sukurkite seką be talpyklos, iš kurios įterpiamos skaitinės reikšmės. Štai kodo pavyzdys:


Užregistruokite paleidimo parametrą -t272

Atidarykite SQL serverio konfigūracijos tvarkytuvą. Pasirinkite "SQL Server 2012" egzempliorių, dešiniuoju pelės mygtuku spustelėkite ir pasirinkite meniu Ypatybės. Iššokančiajame lange raskite paleidimo parametrus ir užregistruokite -t272. Baigę iš naujo paleiskite SQL serverį (SQLSERVER2012) žemiau esančiame paveikslėlyje ir atlikite klaidų atkūrimo operaciją, kad patikrintumėte, ar problema išspręsta.




Papildomos pastabos:

Jei jūsų duomenų bazėje yra daug savaime išpučiamų lentelių ir jos visos turi skaičių šuolių problemų, geriau naudoti antrąją parinktį. Nes tai labai paprasta, o taikymo sritis yra serverio lygio. Antrojo sprendimo priėmimas turės įtakos visoms šio tarnybos egzemplioriaus duomenų bazėms.





Ankstesnis:Žiniatinklio serveris pateikia būsenos kodo tipą ir reikšmę
Kitą:Atnaujinkite savaime augančio ID stulpelio veikimo metodą SQL serverio duomenų bazėje
 Savininkas| Paskelbta 2020-07-08 15:15:52 |
SQL serverio funkcijos aukštesnėse versijose. Jis "talpykloje" 1000 identifikavimo reikšmių iš anksto dėl našumo priežasčių
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com