如何从 CATCH it T-SQL 中触发 SQL 异常?

How to fire up SQL Exception from CATCH it T-SQL?

假设我有以下 table

Create Table [T] ([id] int IDENTITY(1,1) Primary key, [value] varchar(200))

现在我想将 IDENTITY_INSERT 设置为 ON,但如果它无法设置回 OFF

所以我有以下内容:

BEGIN try
  set IDENTITY_INSERT [T] ON
  insert into [T]([id],[value]) values(1,'test')
  set IDENTITY_INSERT [T] OFF
END try
BEGIN catch
  set IDENTITY_INSERT [T] OFF
  --RAISERROR ?
END catch

现在我想立即触发错误,调用者将收到确切的错误(包括数字、参数、严重性等。 好像我打电话给 insert into [T]([id],[value]) values(1,'test') 非身份 table.

我的意思是像从 catch 中抛出异常

try{
  ...
}
catch(Exception e)
{
  throw e;
}

我该怎么做?

是否要重新引发将您带入 CATCH 的错误?而不是仅使用不带任何参数的 THROW。您不能为此使用 RAISERROR,因为您不能同时设置错误编号和文本,也不能引用系统错误。所以,只需 THROW 即可。