2014-02-10 3 views
4

Я работаю над некоторыми проблемами с веб-сайтом и базой данных после перемещения сервера. База данных ранее была SQL Server Express 2005, но теперь работает на SQL Server Express 2012.Проблема RAISERROR с момента перехода на SQL Server 2012

Проблемы относятся к команде RAISERROR и изменениям в 2012 году. Я просмотрел документацию для нового синтаксиса, но не уверен, как я может передавать как номер ошибки, так и сообщение на веб-сайт.

Некоторые примеры команд 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 год?

ответ

4

SQL 2012 не поддерживает нелегальную версию RAISERROR Поддерживаемый синтаксис

RAISERROR(@Message,Serverity,state); 

- @Message может быть идентификатором сообщения, но оно должно существовать в sysmessages, так что если вы хотите, чтобы отправить пользовательские сообщения Я думаю, вы должны добавить их sysmessages

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

Или другой вариант заключается в использовании Бросьте

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

+0

Новый синтаксис позволяет возвращать сообщение или номер ошибки, но не оба? Любые советы о возможности возврата обоих, а также какие значения для использования для серьезности и состояния имитировать недокументированный синтаксис? – johna

+0

Я не думаю, что вы можете отправить оба. Что вам нужно будет добавить пользовательские сообщения в sys.sysmessages, а затем использовать идентификатор сообщения в raiserror. В противном случае вам нужно использовать THROW –

+0

. Мы можем добавить пользовательские сообщения в sysmessages только в том случае, если номер ошибки больше 50000. Номера ошибок в исходном сообщении (44446, 44447) не могут быть созданы в SQL 2012 или более поздних версиях (поскольку они не присутствующие в sysmessages, и они не могут быть добавлены там). –

5

Вы можете заменить код следующим образом:

SQL 2008: raiserror 55030 'text error'

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

Вы не сможете установить номер ошибки, это будет 50000 по умолчанию, но вы можете получить одинаковый уровень ошибок, красный текст и т. д.

Надеюсь, это поможет.

Смежные вопросы