Я работаю над некоторыми проблемами с веб-сайтом и базой данных после перемещения сервера. База данных ранее была 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 год?
Новый синтаксис позволяет возвращать сообщение или номер ошибки, но не оба? Любые советы о возможности возврата обоих, а также какие значения для использования для серьезности и состояния имитировать недокументированный синтаксис? – johna
Я не думаю, что вы можете отправить оба. Что вам нужно будет добавить пользовательские сообщения в sys.sysmessages, а затем использовать идентификатор сообщения в raiserror. В противном случае вам нужно использовать THROW –
. Мы можем добавить пользовательские сообщения в sysmessages только в том случае, если номер ошибки больше 50000. Номера ошибок в исходном сообщении (44446, 44447) не могут быть созданы в SQL 2012 или более поздних версиях (поскольку они не присутствующие в sysmessages, и они не могут быть добавлены там). –