See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 12359|Vastuse: 1

[Allikas] SQL Server 2012 veergud automaatselt kasvavad, millel on väärtuse hüppe probleemid

[Kopeeri link]
Postitatud 23.08.2018 12:03:06 | | | |
Sissejuhatus

Alates SQL Server 2012 väljaannetest, kui SQL Serveri instants taaskäivitatakse, hüppab tabeli automaatse kasvu veeru väärtus ning spetsiifiline hüppe väärtus määratakse kasvuveeru andmetüübi järgi. Kui andmetüüp on int, on hüppeväärtus 1000, ja kui andmetüüp on bigint, on hüppeväärtus 10000. Meie projekti põhjal on selline hüppamisprobleem vastuvõetamatu, eriti kui seda näidata kliendi poolel. See kummaline probleem esineb ainult SQL Server 2012 ja hilisemates versioonides ning seda ei esine versioonides enne SQL Server 2012.


Taust

Mõni päev tagasi pakkus meie kvaliteedikontrolli meeskonna kolleeg: Meie tabeli isekasvava veeru väärtus hüppas seletamatult 10 000 võrra. Teisisõnu, meie tabeli isekasvava veeru viimane väärtus oli 2200, kuid nüüd, kui oleme lisanud uue kirje, on isekasvava veeru väärtus muutunud 12200-ks. Meie äriloogika järgi ei lubata selliseid olukordi kliendile, seega peame selle probleemi lahendama.


Koodi kasutamine

Alguses olime kõik väga kummalised, kuidas see juhtus? Me tavaliselt ei sisesta automaatselt ühtegi väärtust isekasvavatesse veergudesse (käsitsi sisestamine isetäituvatesse veergudesse on täiesti okei) ning isetäituvate veergude väärtused säilitab andmebaas ise. Meie tuumikmeeskonna liige hakkas seda küsimust uurima ja leidis vastuse. Nüüd tahaksin seda probleemi üksikasjalikult selgitada ja lahendust, mille mu kolleeg leidis.


Kuidas seda viga taasluua


Pead installima SQL Server 2012 ja seejärel looma testandmebaasi. Seejärel loo tabel isekasvavate veergudega:
Nüüd sisesta kaks andmetükki:

Vaata tulemusi:






Sel hetkel oli tulemus täpselt see, nagu ootasime. Nüüd taaskäivita oma SQL Server teenus. SQL Service'i taaskäivitamiseks on mitu võimalust ning siin kasutame SQL Server Managerit selle taaskäivitamiseks:



Pärast taaskäivitamist lisame just praegu tabelisse veel kaks andmetükki:



Vaata tulemusi:




Nüüd näed tulemusi pärast SQL Server 2012 taaskäivitamist ja selle isekasvavad veeru väärtused algavad 1002-st. See tähendab, et hüppas 1000. Nagu varem mainitud, kui lisatud andmetüüp on bigint, on selle hüppeväärtus 10 000.


Kas see on tõesti viga?

Microsoft väidab, et see on funktsioon, mitte viga, ja on kasulik paljudes olukordades. Aga meie puhul pole sellist funktsiooni vaja, sest see ise-inkrementaalne info on mõeldud klientidele näitamiseks ja kliendid tunnevad end imelikult, kui nad näevad sellist hüppavat andmet. Ja hüppeväärtus määratakse selle järgi, mitu korda sa SQL Serverit taaskäivitad. Kui neid andmeid klientidele ei näidata, võib see olla vastuvõetav. Seetõttu sobib see funktsioon tavaliselt ainult sisekasutuseks.



lahus

Kui see Microsofti pakutav "funktsioon" meid ei huvita, on kaks võimalust, kuidas selle välja lülitada.

1. Järjestuste kasutamine

2. Registreeri SQL Serveri käivitamisparameeter -t272



Kasuta järjestusi

Esiteks peame eemaldama tabeli isekasvavad veerud. Seejärel luuakse järjestus ilma vahemällu salvestamiseta, kust lisatakse numbrilised väärtused. Siin on näidiskood:


Registreeri käivitusparameeter -t272

Ava SQL Server konfiguratsioonihaldur. Vali oma SQL Server 2012 instant, tee paremklõps ja vali Properties menüü. Leia käivitusparameetrid hüpikaknast ja registreeri -t272. Pärast lõpetamist taaskäivita SQL Server (SQLSERVER2012) alloleval joonisel ning seejärel vii läbi vea taasloomise operatsioon, et kontrollida, kas probleem on lahendatud.




Lisamärkused:

Kui sul on andmebaasis palju isetäituvaid tabeleid ja kõigil on numbrilise hüppe probleem, siis on parem kasutada teist varianti. Sest see on väga lihtne ja ulatus on serveritasandil. Teise lahenduse kasutuselevõtt mõjutab kõiki selle teenuse instantsi andmebaase.





Eelmine:Veebiserver tagastab staatuskoodi tüübi ja tähenduse
Järgmine:Uuenda SQL Serveri andmebaasis isekasvava ID veeru töömeetodit
 Üürileandja| Postitatud 08.07.2020 15:15:52 |
SQL Serveri funktsioonid kõrgemates versioonides. See "vahemällutas" 1000 identifitseerimisväärtust alguses jõudluse huvides
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com