Avatar billede Lasse Novice
23. januar 2008 - 19:14 Der 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
Avatar billede gammelhat Nybegynder
23. januar 2008 - 19:44 #1
Hvis vi antager det samme gælder for alle funktioner, så kan NEWID() nemt opklare det. Den returnerer nemlig to forskellig værdier
Avatar billede hrc Mester
24. januar 2008 - 08:04 #2
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).
Avatar billede arne_v Ekspert
04. februar 2008 - 02:52 #3
Jeg kan ikke findet noget som helst dokumentation for det.

Men så kan man jo teste !!

Den geniale SQL:

SELECT GETDATE(),GETDATE(),GETDATE(),GETDATE(),GETDATE()

viser sig ikke at generere 5 ens tidspunkter i 9 ud af 1 million forsøg.

Hermed er det bevist at i nogen tilfælde vil flere GETDATE kald returnere
forskellige værdier.

Sandsynligheden for at det sker er lille.

Og i langt de fleste tilfælde vil det ikke gøre noget.
Avatar billede hrc Mester
04. februar 2008 - 11:05 #4
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.
Avatar billede arne_v Ekspert
04. februar 2008 - 13:58 #5
Jeg testede med 2005.
Avatar billede Lasse Novice
09. marts 2008 - 22:52 #6
arne_v>> svar => point
Avatar billede arne_v Ekspert
09. marts 2008 - 23:02 #7
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester