sql - 在 MS SQL Server Management Studio 中处理事务的最佳方式

标签 sql tsql transactions

假设我有一个语法和语义正确的 SQL 语句,因此它可以执行。

在 Management Studio(或任何其他查询工具)中,如何测试 SQL 语句,如果我发现它们破坏了某些内容,则回滚(在单独的查询中?)

最佳答案

最简单的方法是将代码包装在事务中,然后逐行执行每批 T-SQL 代码。

例如,

Begin Transaction

         -Do some T-SQL queries here.

Rollback transaction -- OR commit transaction

如果您想合并错误处理,可以使用 TRY...CATCH block 来实现。如果发生错误,您可以在 catch block 中回滚事务。

例如:

USE AdventureWorks;
GO
BEGIN TRANSACTION;

BEGIN TRY
    -- Generate a constraint violation error.
    DELETE FROM Production.Product
    WHERE ProductID = 980;
END TRY
BEGIN CATCH
    SELECT 
        ERROR_NUMBER() AS ErrorNumber
        ,ERROR_SEVERITY() AS ErrorSeverity
        ,ERROR_STATE() AS ErrorState
        ,ERROR_PROCEDURE() AS ErrorProcedure
        ,ERROR_LINE() AS ErrorLine
        ,ERROR_MESSAGE() AS ErrorMessage;

    IF @@TRANCOUNT > 0
        ROLLBACK TRANSACTION;
END CATCH;

IF @@TRANCOUNT > 0
    COMMIT TRANSACTION;
GO

请参阅以下链接了解更多详细信息。

http://msdn.microsoft.com/en-us/library/ms175976.aspx

关于sql - 在 MS SQL Server Management Studio 中处理事务的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/506602/

相关文章:

asp.net-mvc - 使用 Asp.Net MVC 进行自动交易的最佳方式是什么?

java - EJB @Asynchronous - 事务在执行几分钟后不活动

SQL 计算具有不同值的行

php - 如何查询和排列两个相似的表

c# - mysql语法错误?

仅当所有记录都匹配时才加入 SQL

MySQL - count and group by - 在一行中显示所有结果

sql - INSTEAD OF INSERT 触发器和标识列使用 View

sql-server - 令人困惑的行为 - 使用向导创建的 SQL Server 信息架构和列

mysql - 两个索引列上的 SELECT FOR UPDATE 和 WHERE 条件 - 什么是锁定策略?