SqlServer 2008 R2升级到2017后出现Raiserror错误

jvl*_*ove 0 sql-server

请提供建议并分享您的解决方案。

2008年R2

DECLARE @ErrMsg varchar (25) 
SET @ErrMsg = 'Test Raiserror in 2008 R2'
RAISERROR 50002 @ErrMsg
Run Code Online (Sandbox Code Playgroud)

上述语句产生以下输出。

消息 50002,级别 16,状态 1,第 4 行 2008 R2 测试 Raiseerror 完成时间:2022-03-12T20:12:20.1296499+03:00

2017年

DECLARE @ErrMsg varchar (25) 
SET @ErrMsg = 'Test Raiserror in 2017'
RAISERROR 50002 @ErrMsg
Run Code Online (Sandbox Code Playgroud)

上述语句产生以下输出。

消息 102,级别 15,状态 1,第 4 行“50002”附近的语法不正确。完成时间:2022-03-12T20:13:24.4256066+03:00

Dan*_*man 6

RAISERROR 50002 @ErrMsg\n
Run Code Online (Sandbox Code Playgroud)\n

这种形式的RAISERROR语法在许多版本之前已被弃用,并在 SQL Server 2012 版本中从产品中完全删除。来自SQL Server 2012 中已停止使用的数据库引擎功能页面

\n
\n

已停止使用的功能:RAISERROR 格式为 RAISERROR 整数\n\'字符串\' 的功能已停止。

\n

替换:使用当前的 RAISERROR(\xe2\x80\xa6)\ns 语法重写该语句。

\n
\n

作为当前 RAISERROR 语法的替代方案,您可以使用如下所示的THROW 。这允许使用相同的用户定义错误号,而无需将消息添加到 sys.messages(其中RAISERROR需要)。请务必以分号结束前面的语句。

\n
THROW 50002, @ErrMsg, 1;\n
Run Code Online (Sandbox Code Playgroud)\n