Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 12359|Atbildi: 1

[Avots] SQL Server 2012 automātiskās palielināšanas kolonnas ar vērtību lēciena problēmām

[Kopēt saiti]
Publicēts 23.08.2018 12:03:06 | | | |
Ievads

Sākot ar SQL Server 2012 laidieniem, restartējot SQL Server instanci, tabulas automātiskās palielināšanas kolonnas vērtība tiek pārlēkta un konkrēto lēciena vērtību nosaka izaugsmes kolonnas datu tips. Ja datu tips ir int, lēciena vērtība ir 1000, un, ja datu tips ir bigint, lēciena vērtība ir 10000. No mūsu projekta šāda veida lēciena problēma ir nepieņemama, it īpaši, ja tā tiek parādīta klienta pusē. Šī dīvaina problēma ir tikai SQL Server 2012 un jaunākās versijās, un tā nepastāv versijās pirms SQL Server 2012.


fons

Pirms dažām dienām kolēģis no mūsu QA komandas ieteica: Mūsu tabulas pašpalielinošās kolonnas vērtība neizskaidrojami palielinājās par 10 000. Citiem vārdiem sakot, pēdējā pašpalielinošās kolonnas vērtība mūsu tabulā bija 2200, bet tagad, kad esam pievienojuši jaunu ierakstu, pašpalielinošās kolonnas vērtība ir kļuvusi par 12200. Mūsu biznesa loģikā klientam šādas situācijas nav atļautas, tāpēc mums šī problēma ir jāatrisina.


Koda izmantošana

Sākumā mēs visi bijām ļoti dīvaini, kā tas notika? Mēs parasti manuāli neievietojam nekādas vērtības pašpalielinošās kolonnās (manuāli ievietot vērtības pašpiepūšamās kolonnās ir labi), un pašpiepūšamo kolonnu vērtības uztur pati datu bāze. Mūsu pamatkomandas loceklis sāka pētīt šo jautājumu un atrada atbildi. Tagad es gribētu detalizēti izskaidrot šo problēmu un kolēģa atrasto risinājumu.


Kā reproducēt šo kļūdu


Jums būs jāinstalē SQL Server 2012 un pēc tam jāizveido testa datu bāze. Pēc tam izveidojiet tabulu ar pašaugošām kolonnām:
Tagad ievietojiet divus datus:

Pārskatiet rezultātus:






Šajā brīdī rezultāts bija tāds pats, kā mēs gaidījām. Tagad restartējiet SQL Server pakalpojumu. Ir vairāki veidi, kā restartēt SQL pakalpojumu, un šeit mēs izmantojam SQL Server Manager, lai to restartētu:



Pēc restartēšanas mēs tabulā ievietojam vēl 2 datu gabalus:



Pārskatiet rezultātus:




Tagad jūs redzat rezultātus pēc SQL Server 2012 restartēšanas, un tā pašpieaugošās kolonnas vērtības sākas ar 1002. Tas ir, pārlēca 1000. Kā minēts iepriekš, ja pievienotais datu tips ir bigint, tā lēciena vērtība būs 10 000.


Vai tas tiešām ir BUG?

Microsoft norāda, ka šī ir funkcija, nevis kļūda, un tā ir noderīga daudzos scenārijos. Bet mūsu gadījumā mums šāda funkcija nav nepieciešama, jo šie pašpieaugošie dati ir paredzēti, lai parādītu klientiem, un klienti jutīsies dīvaini, ja redzēs šādus lēciena datus. Un lēciena vērtību nosaka SQL Server reižu skaits. Ja šie dati netiek parādīti klientiem, tas var būt pieņemami. Tāpēc šī funkcija parasti ir piemērota tikai iekšējai lietošanai.



šķīdums

Ja mūs neinteresē šī Microsoft piedāvātā "funkcija", ir divi veidi, kā to izslēgt.

1. Secību izmantošana

2. Reģistrējiet startēšanas parametru -t272 SQL Server



Secību izmantošana

Pirmkārt, mums ir jānoņem tabulas pašpalielinošās kolonnas. Pēc tam izveidojiet secību bez kešatmiņas, no kuras tiek ievietotas skaitliskās vērtības. Tālāk ir norādīts koda paraugs.


Reģistrējiet startēšanas parametru -t272

Atveriet SQL Server konfigurācijas pārvaldnieku. Atlasiet SQL Server 2012 instanci, noklikšķiniet ar peles labo pogu un atlasiet izvēlni Rekvizīti. Uznirstošajā logā atrodiet palaišanas parametrus un reģistrējieties -t272. Pēc pabeigšanas restartējiet SQL Server (SQLSERVER2012) zemāk redzamajā attēlā un pēc tam veiciet kļūdu reproducēšanas operāciju, lai pārbaudītu, vai problēma ir novērsta.




Papildu piezīmes:

Ja jūsu datu bāzē ir daudz pašpiepūšamo tabulu un tām visām ir skaitliskas lēciena problēmas, tad labāk ir izmantot otro iespēju. Jo tas ir ļoti vienkārši, un darbības joma ir servera līmenī. Otrā risinājuma pieņemšana ietekmēs visas datu bāzes šajā pakalpojuma instancē.





Iepriekšējo:Tīmekļa serveris atgriež statusa koda tipu un nozīmi
Nākamo:Atjauniniet pašaugošās ID kolonnas darbības metodi SQL Server datu bāzē
 Saimnieks| Publicēts 08.07.2020 15:15:52 |
SQL Server līdzekļi ir jaunākās versijās. Tas "kešatmiņā" 1000 identifikācijas vērtības iepriekš veiktspējas apsvērumu dēļ
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com