【发布时间】:2019-09-20 04:53:01
【问题描述】:
****查询********************************** 我有一个存储过程,它有一个更新和一个插入查询。 更新发生在表 1 中,插入发生在表 2 中。如果插入查询由于任何原因失败,我不想执行更新,反之亦然。 请告诉我如何实现。我的理解是我可能不得不使用 try catch 和 begin 和 end tran 和 rollback 但无法理解如何实现。
刚刚研究了怎么写Try and catch和begin tran and end it。
****************存储过程********************************** **************
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
【问题讨论】:
-
你有两个插入,插入失败你不想执行更新查询??如果表变量的插入失败,则不会执行更新和插入这两个语句,因此,我认为您已经拥有了您想要的。
-
嘿 Susang,这是第二次插入
标签: sql sql-server