我正在编写一个存储过程来定期将数据从多个源表复制到目标表。我想将源表的一列中的数据插入到目标表中,然后根据该列更新目标表。
我写了一个存储过程:
- 将源表中的日期时间数据插入到目标表中,检查是否不插入目标中已存在的任何日期时间值。
- 根据源列更新目标列的其余部分,及时回溯到足以捕获对先前数据的任何更改。
BEGIN TRANSACTION;
BEGIN TRY
INSERT INTO DestTbl (DtTm)
SELECT
TblA.DtTm
FROM
TblA
WHERE
TblA.DtTm > DATEADD(DAY, -1, GETDATE())
AND TblA.DtTm NOT IN
(
SELECT
DestTbl.DtTm
FROM
DestTbl
)
ORDER BY
TblA.DtTm ASC;
COMMIT TRANSACTION;
END TRY
-- There is a transaction like this for each source table
BEGIN TRANSACTION;
BEGIN TRY
UPDATE
DestTbl
SET
DestTbl.Col2 = TblB.SomeCol
FROM
DestTbl
INNER JOIN
TblB
ON
TblB.DtTm > DATEADD(DAY, -1, GETDATE())
AND DestTbl.DtTm = TblB.DtTm;
COMMIT TRANSACTION;
END TRY
确保我的 INSERT 在 UPDATE 语句之前执行的最佳方法是什么?或者我应该将我的查询重构为:https ://stackoverflow.com/a/11010548 ?
谢谢你。