Я пишу хранимую процедуру для регулярного копирования данных из нескольких исходных таблиц в таблицу назначения.Я хотел бы вставить данные из одного столбца исходной таблицы в таблицу назначения, а затем обновить таблицу назначения на основе этого столбца.
Я написал хранимую процедуру, которая:
- Вставляет в таблицу назначения дату-время из исходной таблицы, проверяя, чтобы не вставлять какие-либо значения даты-времени, которые уже существуют в месте назначения.
- Обновляет остальные столбцы назначения на основе исходных столбцов, возвращаясь к тому времени, которое достаточно для того, чтобы любые изменения в предыдущих данных были зафиксированы.
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?
Спасибо.