迁移到SQL Server 2012后的RAISERROR问题

时间:2014-02-10 04:42:11

标签: sql-server sql-server-2012

移动服务器后,我正在处理网站和数据库的一些问题。该数据库以前是SQL Server Express 2005,但现在正在SQL Server Express 2012上运行。

这些问题与2012年的RAISERROR命令和更改有关。我查看了新语法的文档,但不确定如何将错误号和消息传递给网站。

存储过程和触发器中RAISERROR命令的一些示例是:

RAISERROR 50000 'Member with same Email address already exists.'

RAISERROR 44447 'The record can''t be added or changed. Referential integrity rules require a related record in table ''tblBrand''.'

RAISERROR 44446 'The record can''t be added or changed. Referential integrity rules require a related record in table ''tblFragranceHouse''.'

我已将某些内容更改为新语法,但我不确定是否已正确完成此操作。我理解,如果我只是传递错误文本,它会传递错误号50000.但我不知道如何处理其他错误代码。

关于如何将这些命令翻译成2012的任何建议?

2 个答案:

答案 0 :(得分:6)

SQL 2012不支持Raiserror的未记录版本 支持的语法是

RAISERROR(@Message,Serverity,state); 

- @Message可能是消息ID,但它应该存在于sysmessages中,所以如果你想发送自定义消息,我认为你应该添加它们sysmessages

http://msdn.microsoft.com/en-us/library/ms178592.aspx

或另一种选择是使用THROW

http://technet.microsoft.com/en-us/library/ee677615.aspx

答案 1 :(得分:5)

您可以按如下方式替换代码:

SQL 2008:raiserror 55030 'text error'

SQL 2012:raiserror ('text error', 16, 1)

您将无法设置错误编号,默认情况下它将为50000,但您可以获得相同的错误级别,红色文本等。

希望它有所帮助。