关于SQL Server update语句执行顺序
背景
写了一个触发器当As表插入数据时,As表的主表A表t字段将写入触发器中运算的数据。在触发器中写了一个临时表来储存运算数据,之后用Update语句更新到表A的t字段中。
在向临时表中储存数据的语句中我加入了where条件,而更新语句中没有加入where条件。最终导致符合where条件的数据被更新,不符合where条件的数据t字段数据被清空了。由此我猜测sql server在执行update语句时是先根据条件把相应字段的数据清空再写入数据。
代码
最开始只有HAVING后面的条件,update语句没有where条件。
INSERT INTO #T1(cNo, cTonnage ,cDate )
SELECT R1.cNo,SUM( cMouldWeight) cTonnage,R1.cDate FROM RH_LONGAPPLY R1 LEFT JOIN RH_LONGAPPLYS R2
ON R1.RH_LONGAPPLY_PK=R2.RH_LONGAPPLY_PK GROUP BY R1.cNo,R1.cDate HAVING cDate>=DATEADD(d,-1 ,GETDATE())
DECLARE @count int=0,@count1 INT
SELECT @count1=count(cNo) FROM #T1
WHILE(@count<=@count1)
BEGIN
UPDATE RH_LONGAPPLY
SET cTonnage = B.cTonnage
FROM RH_LONGAPPLY A LEFT JOIN #T1 B ON A.cNo=B.cNo
WHERE A.cDate>=DATEADD(d,-1 ,GETDATE())
SET @count=@count+1
END