Will GETUTCDATE() return the same value if used twice in the same statement?

前端 未结 5 2115
迷失自我
迷失自我 2020-11-30 11:12

I have a trigger that automatically sets the CreationDate and ModifiedDate of the given entry to the current UTC time whenever a value is entered. (CreationDate will remain

5条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-11-30 11:46

    DECLARE @Counter INT = 1
    
    WHILE (1 = (SELECT 1 WHERE GETUTCDATE()  = GETUTCDATE()))
    SET @Counter = @Counter+1
    
    SELECT @Counter /*Returns almost immediately with a number in the 000s for me.*/
    

    And just to prove this happens when in the SELECT list also.

    DECLARE @T TABLE 
    (
    rownum INT IDENTITY(1,1) PRIMARY KEY,
    d1 datetime,
    d2 datetime
    )
    
    WHILE (NOT EXISTS(SELECT * FROM @T WHERE d1 <> d2))
        BEGIN
        DELETE FROM @T
        INSERT INTO @T 
        SELECT GETUTCDATE(),GETUTCDATE()
        END
    
    SELECT * FROM @T
    

    BTW: IF for some reason you want to evaluate GETUTCDATE() on a per row basis you can wrap it in a scalar UDF.

    CREATE FUNCTION dbo.GETUTCDATE()
    RETURNS DATETIME
    WITH SCHEMABINDING
    AS
    BEGIN
    RETURN GETUTCDATE()
    END
    GO
    
    SELECT GETUTCDATE(),dbo.GETUTCDATE()
    FROM master..spt_values
    

提交回复
热议问题