微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果 SECOND 语句失败 SQL,则不要执行 FIRST 语句

如何解决如果 SECOND 语句失败 SQL,则不要执行 FIRST 语句

如果用户在第二条语句运行之前停止查询执行,我必须在一个块中执行整个过程,以防止大量数据丢失。

SET XACT_ABORT ON 在发生错误时中止批处理 当用户停止执行时,我需要类似的东西。

GO

CREATE PROCEDURE [dbo].[sp_Users] 
AS
BEGIN
    -- Statement 1:
   DELETE FROM Users

    -- Statement 2:
   INSERT INTO Users VALUES 
   (1,'John','Whatever'),(4,'Jessy',NULL),(5,'Adam',NULL)

END

解决方法

我认为使用带有错误条件语句的事务是可行的。所有在一个事务中,您都可以运行第一个删除语句。然后,您可以使用 MS SQL 全局变量 @@ERROR 查找错误,以确定 proc 是否应继续执行第二个语句。如果一切顺利,则提交事务,否则整个事务将回滚。对于全局变量,如果您不是要查找错误而是要查找受影响的行,@@ROWCOUNT 可能会有所帮助。

BEGIN TRANSACTION StatementsTest
      -- Statement 1:
    DELETE FROM Users

IF  @@ERROR = 0
    BEGIN
    -- Statement 2:
    INSERT INTO Users VALUES 
    (1,'John','Whatever'),(4,'Jessy',NULL),(5,'Adam',NULL)

    COMMIT TRANSACTION StatementsTest
    END
ELSE    
    BEGIN
    ROLLBACK TRANSACTION StatementsTest
    END

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。