Does GetDate () se re-avaliada para cada iteração dentro de loop dentro de uma transação?
-
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!
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