sql >> Database >  >> RDS >> Sqlserver

Geeft GETUTCDATE() dezelfde waarde terug als deze twee keer in dezelfde instructie wordt gebruikt?

Dankzij de links van gbn, denk ik dat dit mijn vraag beantwoordt:

Net als rand() wordt het eenmaal per kolom geëvalueerd, maar eenmaal geëvalueerd blijft het hetzelfde voor alle rijen....kijk naar de eigenschappen van de ComputeScalar-operator in het daadwerkelijke uitvoeringsplan, je zult zien dat GetDate() twee keer wordt geëvalueerd.

Ik heb het gecontroleerd en het lijkt erop dat dit nog steeds op dezelfde manier gebeurt in SQL Server 2008:GetUtcDate() wordt tweemaal geëvalueerd in het uitvoeringsplan. Het zal niet per rij verschillende resultaten opleveren, maar het is mogelijk dat het per kolom een ​​ander resultaat oplevert als de timing precies goed zou zijn.

Bewerken

Ik kan dit gedrag echt bewijzen! Probeer dit:

select GETUTCDATE(), RAND(), RAND(), ...[~3000 RAND()s]..., RAND(), GETUTCDATE()
from [TableOfYourChoice]

In mijn experiment eindigde ik met 2011-05-17 20:47:34.247 in de eerste kolom en 2011-05-17 20:47:34.250 in de laatste kolom, met een verschil van drie milliseconden als resultaat van de evaluatie van alle RAND() s tussen de eerste en tweede aanroep van GETUTCDATE().



  1. Haal de dag van het jaar uit een datum in SQL Server (T-SQL)

  2. Oracle UTL_FILE lees CSV-bestandsregels

  3. Implementatie van Levenshtein-afstand voor mysql/fuzzy zoeken?

  4. Oracle:Zoeken in volledige tekst met voorwaarde