Tsql 为什么GETDATE在MERGE语句中不断被调用?

Tsql 为什么GETDATE在MERGE语句中不断被调用?,tsql,merge,Tsql,Merge,我有一个存储过程,它有一个datetime变量,在过程开始时用GETDATE设置,然后调用一个MERGE语句 所发生的不是一个日期被盖章,而是日期周期性地改变。这是一个长期运行的过程 有没有办法得到一个日期并在所有记录上盖章 create proc MyProc as declare @insertdate datetime set @insertdate = getdate() merge dbo.something as target using (select col1,col2 from

我有一个存储过程,它有一个datetime变量,在过程开始时用GETDATE设置,然后调用一个MERGE语句

所发生的不是一个日期被盖章,而是日期周期性地改变。这是一个长期运行的过程

有没有办法得到一个日期并在所有记录上盖章

create proc MyProc as
declare @insertdate datetime
set @insertdate = getdate()
merge dbo.something as target
using (select col1,col2 from dbo.another) as source
on (target.col1 = source.col1 and target.col2 = source.col2)
when not matched by target
insert (col1, col2, insertdate) values (source.col1, souce.col2, @insertdate);

不插入col1、col2、datetimeCol值source.col1、souce.col2、@insertdate;work?@MartinSmith该语句确实插入了varfyi,我有一个非常大的on语句,最终得到了一个cartitian产品,这导致作业运行了很长一段时间,在此期间它插入了多个日期。当我解决卡蒂提亚产品问题时,同一个日期被卡住了。我仍然很好奇到底发生了什么,以及将来如何避免。我觉得这个名为once的声明不太可能更新这个领域。getdate只调用了一次——这不会导致再次调用和重新计算。您是否绝对确定没有从外部插入或其他外部进程更新默认值,甚至没有第二次调用此SP设置默认值?@chris您确定没有看到多个重叠的进程运行?合并后很难确定。。。