2016-04-13 14 views
3

Ich habe eine Tabelle, die wie diese übernehmen die aussiehtWerden SQL Server-Standardwerte vor oder nach dem Einfügen generiert?

CREATE TABLE bob 
    (ID INT IDENTITY, 
    blah VARBINARY(MAX), 
    ts DATETIME2 DEFAULT GETUTCDATE()) 

Lassen Sie, dass diese Aussage

INSERT INTO dbo.bob 
     (blah) 
VALUES (
      @blarg 
     ) 

10 Sekunden dauern.

Wenn die Zeit zu Beginn der Einfügung ist t. Wird ts t oder t + 10 Sekunden in der neu erstellten Zeile haben? Mit anderen Worten, werden Standardwerte am Anfang der Einfügung oder am Ende der Einfügung (oder einer anderen Regel) erzeugt?

Antwort

6

GETUTCDATE ist ein runtime constant

Es wird einmal durchgehend für alle Zeilen, die von der Anweisung eingefügt verwendet zu Beginn und den gleichen Wert berechnet werden.

Wenn Sie es jedoch in eine UDF-Skalarfunktion umbrechen, die GETUTCDATE aufruft und den Standardwert so ändert, dass stattdessen die UDF aufgerufen wird, werden möglicherweise andere Werte angezeigt, als dann Zeile für Zeile ausgewertet wird.

Für eine einzelne Zeile Aussage ich denke, es hängt davon ab, wo die 10 Sekunden Verzögerung ist. Wenn es den Plan für 10 Sekunden nicht kompilieren kann, wird es bis dahin nicht ausgeführt werden, so dass die Zeit sein wird. Wenn es startet und auf eine Sperre wartet, würde ich mir vorstellen, dass es eine Zeit vor dem Warten zugewiesen werden sollte, da die Laufzeitkonstante bereits aufgelöst werden sollte.

+1

Sie sind falsch. Ich habe es einfach überprüft, um es zu überprüfen. Bei Verwendung als Standardbedingung werden GETDATE und GETDATEUTC mit jeder insert-Anweisung erneut ausgeführt. – Cogman

+1

@Cogman du hast meine Antwort dann nicht richtig gelesen. Es wird sicherlich nicht behauptet, dass der Wert zwischen den Aussagen bestehen bleibt. Ich spreche über den Fall, in dem Sie mehrere Zeilen in eine einzelne Anweisung einfügen und die INSERT-Anweisung 10 Sekunden dauert. –

+1

Mein Fehler. Du hast recht :) . Ich lese Ihre Aussage noch einmal und es ergibt Sinn. Entschuldigung für die Verwirrung. – Cogman

Verwandte Themen