Does GetDate () se re-avaliada para cada iteração dentro de loop dentro de uma transação?

StackOverflow https://stackoverflow.com/questions/1847720

  •  13-09-2019
  •  | 
  •  

Pergunta

Eu tenho um cenário onde eu estou looping através de um conjunto de resultados dentro de uma transação e eu preciso inserir um valor de data e hora única dentro de uma tabela para cada iteração através do conjunto de resultados - vai GetDate () ser recalculado a cada vez ou vai ser apenas calculado a primeira vez e, em seguida, ser o mesmo para cada iteração através do loop?

O meu pseudo-código está abaixo:

BEGIN TRANSACTION
GO

DECLARE @ID INT 
DECLARE @table TABLE (/* Columns */) 

WHILE (SELECT COUNT(*) FROM @table WHERE PROCESSED = 0) > 0
      BEGIN

            SELECT TOP 1 @ID = ID FROM @table WHERE PROCESSED = 0 

            -- INSERT GetDate() into child table at this point. 
            -- Will GetDate() be re-evaluated each time? 

            UPDATE @table SET PROCESSED = 1 WHERE ID = @ID 

      END

END TRANSACTION
GO

Agradecemos antecipadamente!

Foi útil?

Solução

Sim.

Se você quiser evitar a re-avaliar-lo, armazenar o seu valor em uma variável antes do loop, e inserir que em vez.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top