我在触发器中看到了这个 SQL Update 语句,并且不确定更新是否准确 - 基于查看表别名的位置和更新表语法。
该语法在执行时不会给出任何错误,并且在我的测试数据库上的随机样本上执行时会正确更新记录。
但是,在具有更多记录的较大 PROD DB 上,是否有可能更新失败或完全跳过?有报告称随机记录没有设置 SAMPLE.ISCOMPOSITESAMPLE 字段。
有问题的语法
UPDATE SAMPLE SET
SAMPLE.SAMPLETYPE = (SELECT DESCRIPTION FROM SAMPLETYPE WHERE SAMPLETYPENO = C.SAMPLETYPENO),
SAMPLE.ISCOMPOSITESAMPLE = (SELECT COMPOSITESAMPLE FROM SAMPLETYPE WHERE SAMPLETYPENO = C.SAMPLETYPENO)
FROM SAMPLE C
INNER JOIN INSERTED T ON C.SAMPLENO = T.SAMPLENO
我熟悉的语法(类似于上面,但故意不为比较而优化)
UPDATE C SET
SAMPLETYPE = (SELECT DESCRIPTION FROM SAMPLETYPE WHERE SAMPLETYPENO = C.SAMPLETYPENO),
ISCOMPOSITESAMPLE = (SELECT COMPOSITESAMPLE FROM SAMPLETYPE WHERE SAMPLETYPENO = C.SAMPLETYPENO)
FROM SAMPLE C
INNER JOIN INSERTED T ON C.SAMPLENO = T.SAMPLENO