Не хотите выполнять обновление, если вставка не была выполнена - PullRequest
0 голосов
/ 20 сентября 2019

**** Запрос ***************************** У меня есть одна хранимая процедура, которая получила одно обновление и одну вставкузапрос.Обновление происходит, скажем, в Table1, а вставка происходит, скажем, в Table2.Я не хочу выполнять обновление, если запрос вставки завершается неудачно по какой-либо причине и наоборот.Пожалуйста, скажите мне, как реализовать это. Я понимаю, что мне, возможно, придется использовать try catch и begin и end trans и rollback, но я не могу понять, как это реализовать.


Только что исследовал, какнапиши Попробуй и поймай и начни тран и заканчивай.

**************** Хранимая процедура *******************************************

 INSERT INTO @TempVariable(DUNS_Request_ID ,DUNS_Transaction_ID,DUNS_Status_ID)

SELECT T1.DUNS_Request_ID,T2.DUNS_Transaction_ID,DUNS_Status_ID
FROM   DUNS_Request_Master T1 
       LEFT JOIN DUNS_Transactions T2 ON T1.DUNS_Request_ID=T2.DUNS_Request_ID
WHERE  T1.DUNS_Request_ID IN 
      (SELECT DUNS_Request_ID FROM DUNS_Transactions WHERE DUNS_Status_ID = 2)
       AND CONVERT(DATE,RequestedDate) <= DATEADD(DAY, -1,CONVERT(DATE,GETDATE()))

UPDATE DUNS_Transactions 
SET    
       AssignedToUser_ID              = @ContentUserID
      ,DUNS_Status_ID                 = @FreeDUNSStatusID
      ,DUNS_Transaction_Update_Status = 'Automatic Conversion to Free DUNS'
      ,ProcessedDateTime              = GETDATE()

WHERE DUNS_Request_ID IN (SELECT DUNS_Request_ID FROM @TempVariable)

INSERT INTO    [DUNS_Transaction_Details]
               (
                DUNS_Request_ID,
                DUNS_Transaction_ID,
                DUNS_Status_ID,
                AssignedToUser_ID,
                AssignedByUser_ID,
                Comments,
                CommentsBy,
                CommentDate,
                ProcessedDateTime,
                IsActive
                )
        SELECT  DUNS_Request_ID,
                DUNS_Transaction_ID,
                @FreeDUNSStatusID,
                @ContentUserID,
                NULL,
                'Automatic Conversion to Free DUNS',
                NULL,
                GETDATE(),
                GETDATE(),
                1
        FROM    @TempVariable

Ответы [ 2 ]

0 голосов
/ 20 сентября 2019

Вы также можете сдвинуть логику update ниже insert и объединить DUNS_Transaction_Details с уникальными конбинационными данными, которые просто вставляются, чтобы проверить, успешна ли вставка или нет

UPDATE DT SET    
    AssignedToUser_ID = @ContentUserID
    ,DUNS_Status_ID = @FreeDUNSStatusID
    ,DUNS_Transaction_Update_Status = 'Automatic Conversion to Free DUNS'
    ,ProcessedDateTime = GETDATE()
FROM DUNS_Transactions  DT
INNER JOIN @TempVariable T ON T.DUNS_Request_ID = DT.DUNS_Request_ID
--Below join will check if insert is success - Join with unique columns
INNER JOIN DUNS_Transaction_Details DTD ON DTD.DUNS_Request_ID = T.DUNS_Request_ID 
    AND DTD.DUNS_Transaction_ID = T.DUNS_Transaction_ID 
--You can add more columns in the join to make it unique combination
0 голосов
/ 20 сентября 2019

Ваше исследование верно:

Это будет

Begin Try
    Begin Tran
        Query 1
        Query 2
    Commit Tran
End Try
Begin Catch
    Rollback
End catch
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...