26. april 2007 - 14:54Der er
10 kommentarer og 1 løsning
Hvordan sikrer man eksekvering i den rigtige rækkefølge
Jeg får nogle data returneret fra en hjemmeside til en temp tabel, 1 - 5 rækker af gangen. En Insert trigger ekseverer en sp der opdaterer rækkerne med dels med stamdata fra andre tabeler og dels beregnede værdier. Nu er rækkerne klar til at blive overført til den "rigtige tabel hvilket klares af en anden sp. Herefter skal rækkerne slettes i temp tabellen evt af en 3. sp.
Når jeg manuelt eksekverer disse sp's i nævnte rækkefølge opnår jeg det ønskede resultat. Hvis jeg derimod eksekverer en ny sp2 i slutningen af sp1 ser det ud til at jeg ikke får opdateret alle felterne rigtigt, måske fordi den begynder at slette før den er færdig med at opdatere? Hvad gør jeg forkert?
Det er ikke en rigtig temporary tabel undskyld mit sprogbrug, men en temp tabel i den forstand at data mellemlander , bliver behandlet og sendt vidree til slutdestinisionen. Jeg ved ikke om det var det her du mente eller der er en smartere måde at skrive på. I alt fald siger jeg tak for det gode hint, og send et svar for det virker.
set transaction isolation level serializable begin transaction 1 Statements commit transaction 1
set transaction isolation level serializable begin transaction 2 exec sp1 commit transaction
set transaction isolation level serializable begin transaction 3 exec sp2 commit transaction 3
Som du skriver der prøvede jeg først idet det var det mest logiske jvf. dokumentationen. Imidlertid fejler de samme 5 felter hvergang, men faktisk ved jeg ikke om de fejler i opdateringen eller insert'en, for som sagt virker alting perfekt når jeg eksekverer de 3 sp's manuelt en efter en. At det så virker når jeg skriver det som ovenfor kan jeg ikke forklare, men det ville jo være rart at kende årsagen.
Det er et godt spørgsmål - Jeg har ikke så meget erfaring i det her. Projektet jeg har gang i her går ud på at gøre dele af vores administrationssystem Navision Attain tilgængeligt fra nettet. De tabeller jeg bruger er derfor oprettet via Navisions interface fordi jeg ikke aner hvordan Navision klienten reagerer på at der bliver oprettet tabeller i databasen af en 3. part.(Det koster ca. 350 for at få rettigheder til at oprette nye tabeller i navision pr stk.) Men det kunne jo afprøves. Men hvilke fordele er der i at bruge en rigtig temporær tabel?
Alle dine gode råd har hjulpet mig et stort skridt videre. Jeg har voldtestet det med samtidigheden og er meget i tvivl om det er værd at gøre meget ud af. Hvis der bliver sendt en eller flere rækker fra en eller flere sider til samme eller flere ordrenumre optræder der deadlocks hvis der er under 0,5 sekund mellem submit'ene. Over 0,5 sekund kan jeg sende og sende uden fejl. Med 4 brugere og 30 - 40 ordrer om ugen vil der formentlig sjældent opstå deadlock fejl. Men er der nogen retningslinjer for hvornår man skal tage denne fejl alvorligt? Eller er kan man sige at det er "dårligt håndværk" at se bort fra fejlmuligheden fordi den optræder yderst sjældent?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.