use*_*775 5 sql t-sql sql-server sql-server-2008
我有以下代码,我想知道,作为一个通用示例,如果事务退出时保持打开状态RETURN.
BEGIN TRANSACTION
BEGIN TRY
IF NOT EXISTS(SELECT 1 FROM dbo.tblProducts WHERE intProductID = @intProductID)
BEGIN
SELECT 'Product does not exists' AS strMessage
RETURN
END
UPDATE dbo.tblProducts SET
curPrice = 10
WHERE
intProductID = @intProductID
SELECT 'Success' AS strMessage
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE() AS strMessage
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION
END CATCH
IF @@TRANCOUNT > 0
COMMIT TRANSACTION
Run Code Online (Sandbox Code Playgroud)
它应该像下面一样
BEGIN TRY
SET NOCOUNT ON
SET XACT_ABORT ON
BEGIN TRANSACTION
IF NOT EXISTS(SELECT 1 FROM dbo.tblProducts
WHERE intProductID = @intProductID)
BEGIN
SELECT 'Product does not exists' AS strMessage
Rollback TRan
RETURN
END
UPDATE dbo.tblProducts SET
curPrice = 10
WHERE
intProductID = @intProductID
SELECT 'Success' AS strMessage
COMMIT TRAN
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE() AS strMessage
ROLLBACK TRANSACTION
END CATCH
Run Code Online (Sandbox Code Playgroud)
小智 2
此代码适用于嵌套事务:
BEGIN TRY
IF @@TRANCOUNT > 0
SAVE TRANSACTION MyTransactionName
ELSE
BEGIN TRANSACTION MyTransactionName
IF NOT EXISTS(SELECT 1 FROM dbo.tblProducts WHERE intProductID = @intProductID)
BEGIN
SELECT 'Product does not exists' AS strMessage
ROLLBACK TRANSACTION MyTransactionName
RETURN
END
UPDATE dbo.tblProducts SET
curPrice = 10
WHERE
intProductID = @intProductID
SELECT 'Success' AS strMessage
COMMIT TRANSACTION MyTransactionName
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE() AS strMessage
ROLLBACK TRANSACTION MyTransactionName
END CATCH
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18485 次 |
| 最近记录: |