如果用户在第二条语句运行之前停止查询执行,我必须在一个块中执行整个过程,以防止大量数据丢失。
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
答案 0 :(得分:0)
我认为使用带有错误条件语句的事务是可行的。所有在一个事务中,您都可以运行第一个删除语句。然后,您可以使用 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