Контроль порядка выполнения операторов INSERT и UPDATE - PullRequest
1 голос
/ 14 мая 2019

Я пишу хранимую процедуру для регулярного копирования данных из нескольких исходных таблиц в таблицу назначения.Я хотел бы вставить данные из одного столбца исходной таблицы в таблицу назначения, а затем обновить таблицу назначения на основе этого столбца.

Я написал хранимую процедуру, которая:

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

Спасибо.

...