23. januar 2008 - 19:14Der er
6 kommentarer og 1 løsning
Parsing af SQL
Jeg har en SQL saetning:
SELECT GETDATE(), ISNULL(StartDato, GETDATE()), dbo.BeregnArbejdsMinutter(ISNULL(StartDato, GETDATE()), GETDATE()) FROM Arbejde WHERE ArbejdeId = 56
I denne SQL saetning forekommer GETDATE() 4 gange. Af ren nysgerrighed... kunne jeg godt taenke mig at vide om GETDATE bliver eksekveret 4 gange (og derved kan datoen vaere forskellig i de 4 situationer) eller er parseren saa smart at den kun eksekverer det een gang og derefter erstatter de efterfoelgende med samme vaerdi ligesom foelgende SQL
DECLARE @Now AS DATETIME SET @Now = GETDATE()
SELECT @Now, ISNULL(StartDato, @Now), dbo.BeregnArbejdsMinutter(ISNULL(StartDato, @Now), @Now) FROM Arbejde WHERE ArbejdeId = 56
NewID er nok bare en tæller, så den dur ikke som paradigme. Er det ikke bare at lave samme operation på en tabel, bare med insert...? Min test viser at der tilsyneladende ikke sker bræk over et sekundskift (oprettede 100 records).
Arne: Dit bevis afhænger af den valgte MSSQL :-) Det kan være MS har optimeret i nye versioner - det tror jeg nu ikke. Det vigtigste i SQL er ikke hastighed på funktionerne. Det er, at de returnerer de absolut rigtigste værdier.
Min test lignede meget - men jeg var ikke så smart at slecte dem, men indsatte record i en tabel.
... men lad nu være med at bruge GetDate() som nøgle i dine tabeller.
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.