Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 12359|Odpoveď: 1

[Zdroj] SQL Server 2012 stĺpce automatického rastu s problémami s preskokom hodnoty

[Kopírovať odkaz]
Zverejnené 23. 8. 2018 12:03:06 | | | |
Zavedenie

Od vydaní SQL Server 2012, keď sa inštancia SQL Server reštartuje, hodnota stĺpca automatického rastu tabuľky skočí a konkrétna hodnota skoku je určená typom dát stĺpca rastu. Ak je dátový typ int, hodnota skoku je 1000, a ak je typ dáta bigint, hodnota skoku je 10000. Z nášho projektu je takýto problém s preskakovaním neprijateľný, najmä ak je zobrazený na strane klienta. Tento zvláštny problém sa vyskytuje iba v SQL Server 2012 a novších verziách a neexistoval vo verziách pred SQL Server 2012.


pozadie

Pred niekoľkými dňami kolega z nášho QA tímu navrhol: Hodnota samozvyšujúceho sa stĺpca v našej tabuľke nevysvetliteľne vzrástla o 10 000. Inými slovami, posledná hodnota samozvyšujúceho sa stĺpca v našej tabuľke bola 2200, ale teraz, keď sme pridali nový rekord, hodnota samozvyšujúceho sa stĺpca sa zvýšila na 12200. V našej obchodnej logike nie sú takéto situácie na klientovi povolené, takže tento problém musíme vyriešiť.


Použitie kódu

Najprv sme boli všetci veľmi zvláštni, ako sa to stalo? Zvyčajne manuálne nezadávame žiadne hodnoty do samozvyšujúcich sa stĺpcov (manuálne vkladanie hodnôt do samonafukujúcich stĺpcov je v poriadku) a hodnoty samonafukujúcich stĺpcov udržiava samotná databáza. Člen nášho hlavného tímu začal túto otázku skúmať a našiel odpoveď. Teraz by som rád podrobne vysvetlil tento problém a riešenie, ktoré našiel môj kolega.


Ako reprodukovať túto chybu


Budete musieť nainštalovať SQL Server 2012 a potom vytvoriť testovaciu databázu. Potom vytvorte tabuľku so samorastúcimi stĺpcami:
Teraz vložte dva údaje:

Preskúmajte výsledky:






V tomto bode bol výsledok rovnaký, ako sme očakávali. Teraz reštartujte svoju SQL Server službu. Existuje niekoľko spôsobov, ako reštartovať SQL Service, a tu používame SQL Server Manager na jeho reštart:



Po reštarte práve teraz vkladáme do tabuľky ďalšie 2 údaje:



Preskúmajte výsledky:




Teraz vidíte výsledky po reštarte SQL Server 2012 a jeho samozvyšujúce sa stĺpcové hodnoty začínajú na 1002. Teda, skočil o 1000. Ako už bolo spomenuté, ak je pridaný dátový typ bigint, jeho hodnota skoku bude 10 000.


Je to naozaj CHYBA?

Microsoft uvádza, že ide o funkciu, nie chybu, a je to užitočné v mnohých situáciách. Ale v našom prípade takúto funkciu nepotrebujeme, pretože tieto samoinkrementálne dáta sú určené na zobrazenie zákazníkom a zákazníci sa budú cítiť zvláštne, ak uvidia takéto skákajúce dáta. A hodnota skoku je určená počtom reštartov SQL Servera. Ak tieto údaje nie sú zákazníkom ukázané, môžu byť prijateľné. Preto je táto funkcia zvyčajne vhodná len pre interné použitie.



riešenie

Ak nás táto "funkcia", ktorú ponúka Microsoft, nezaujíma, existujú dva spôsoby, ako ju môžeme vypnúť.

1. Použitie sekvencií

2. Zaregistrovať počiatočný parameter -t272 pre SQL Server



Použitie sekvencií

Najprv musíme odstrániť samozvyšujúce sa stĺpce tabuľky. Potom vytvorte sekvenciu bez ukladania do vyrovnávacej pamäte, z ktorej sa vkladajú číselné hodnoty. Tu je ukážkový kód:


Zaregistrujte počiatočný parameter -t272

Otvorte SQL Server Configuration Manager. Vyberte inštanciu SQL Server 2012, kliknite pravým tlačidlom a vyberte menu Vlastnosti. Nájdite parametre spustenia v vyskakucom okne a zaregistrujte -t272. Po dokončení reštartujte SQL Server (SQLSERVER2012) na obrázku nižšie a potom vykonajte operáciu reprodukcie chýb, aby ste overili, či bol problém vyriešený.




Ďalšie poznámky:

Ak máte v databáze veľa samonafukujúcich tabuliek a všetky majú problémy s číselným skokom, je lepšie použiť druhú možnosť. Pretože je to veľmi jednoduché a rozsah je na úrovni servera. Prijatie druhého riešenia ovplyvní všetky databázy na tejto inštancii služby.





Predchádzajúci:Webový server vracia typ stavového kódu a jeho význam
Budúci:Aktualizujte spôsob prevádzky samozväčšujúceho sa ID stĺpca v databáze SQL Server
 Prenajímateľ| Zverejnené 8. 7. 2020 15:15:52 |
Funkcie SQL Serveru sú vo vyšších verziách. Pre výkonnosť "ukladá" 1000 identifikačných hodnôt hneď na začiatku
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com