使用变量时,THROW 未返回正确的行号

Riv*_*nni 5 sql-server

在 CATCH 块中经常提到的 THROW 的好处是它返回发生错误的正确行号。我注意到只有当我使用没有任何变量的 THROW 时它才会这样做。使用下面的格式,我自己的错误号和消息返回 THROW 本身的行号(就像 RAISERROR 一样)。

THROW 50055, 'my message', 1;
Run Code Online (Sandbox Code Playgroud)

这是意料之中的一个已知缺陷还是我做错了什么?

我正在使用 SQL Server 2017 CU20。

Dav*_*oft 7

这是意料之中的一个已知缺陷还是我做错了什么?

是的,这是预期的行为。您生成了一条新的错误消息,它源自 的调用站点THROW ...。这就是为什么您应该只支持THROW;或者您需要将所有相关的错误上下文信息封装在您的消息中的原因。