在 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
【问题讨论】:
请更新问题标签。您有冲突的标签。plsql
是 Oracle
不是 SQL Server
【参考方案1】:
使用THROW
和XACT_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