在 raiserror sqlserver 上终止进程

Posted

技术标签:

【中文标题】在 raiserror sqlserver 上终止进程【英文标题】:terminate the process upon raiserror sqlserver 【发布时间】:2021-10-29 19:52:03 【问题描述】:

我需要知道如何在遇到 raiserror 命令时停止进程

我尝试了不同的状态代码,例如 1、-1,严重程度为 16。但它不会停止这个过程。它显示错误并继续下一步。

一旦遇到 raiserror,我想要一种方法来停止该过程的其余部分

create procedure p_testing
as
begin
RAISERROR('Error is raised',16,1);
insert into blah(si,name) values(1,'teasting_raiserror');
END

Exec p_testing

【问题讨论】:

请更新问题标签。您有冲突的标签。 plsqlOracle 不是 SQL Server 【参考方案1】:

使用THROWXACT_ABORT

CREATE TABLE dbo.SomeTable (ID int IDENTITY(1,1), SomeString varchar(10));
GO

CREATE PROC dbo.SomeProc @SomeString varchar(10) AS
BEGIN
    
    SET XACT_ABORT ON;
    
    THROW 59000, N'A pointless error has been raised!', 16;

    INSERT INTO dbo.SomeTable (SomeString)
    VALUES (@SomeString);
END;
GO

EXEC dbo.SomeProc 'MyString';

--This statement won't be run
SELECT *
FROM dbo.SomeTable;
GO
--This will be, as in a separate batch
SELECT *, NULL AS AdditionalColumn
FROM dbo.SomeTable;
GO
--Clean up

DROP PROC dbo.SomeProc;
DROP TABLE dbo.SomeTable;

【讨论】:

以上是关于在 raiserror sqlserver 上终止进程的主要内容,如果未能解决你的问题,请参考以下文章

sqlServer2008升级2016raiserror语法修改工具

SQL Server2012中的Throw语句尝试 RAISERROR和THROW比较

SQL Server:Raiserror 其中@variable = true

从 .NET 中的 SQL Server 捕获 RAISERROR

RAISERROR 的用法(转)

过程中的 Raiserror (SQL Server 2014) 无法捕获客户端 (c#)