從下面的代碼中,我們得到了raiseerror的異常 - 當前事務不能被提交,並且不能支持寫入日誌文件的操作。回滾事務。當前事務不能提交,並且不能支持寫入日誌文件的操作。回滾事務
IF @insertOrUdate = 'D'
BEGIN
-- DescType depends on CorrectionType and is also a protected sync table,
-- it needs to be cleared out before we can remove this type
IF EXISTS(
SELECT TOP 1 *
FROM [dbo].[DescType]
WHERE
[CorrectionTypeId] = @correctionTypeId
)
BEGIN
PRINT 'raise error'
RAISERROR('Dependent Desc Role Type Rollups must be removed prior to removing a type that they depend on', 16, 1)
PRINT 'after raise error'
END
-- Delete protected Sync record
DELETE FROM [dbo].[CorrectionType] WHERE [CorrectionTypeId] = @correctionTypeId;
END;
上面的代碼片斷是在事務中還是在TRY..CATCH塊中?在此代碼段運行時,XACT_ABORT設置是什麼?另外,dbo.CorrectionType是否有觸發器? –
這段代碼是從另一個proc調用的,它有開始和提交事務。 XACT_ABORT已打開。是的觸發器存在,但是在beginnig中,我們禁用了觸發器並在結束時啓用它們。這裏是完整的代碼供你參考: –
如果你正在做一個'EXISTS()'調用,你不應該對查詢做任何有趣的事情,比如'TOP 1'或'ORDER BY' - 你所做的只是混淆該查詢並可能導致優化器做一些愚蠢的事情(比如實現整個結果集)。 EXISTS()本身足夠聰明,只要看到單個結果行就可以退出。 –