У меня был тот же вопрос, поэтому я наткнулся на этот пост. Из того, что я вижу, на самом деле есть различие, и написание не единственное, что отличается между этими двумя случаями. Эти две функции не эквивалентны из-за использования.
Ссылки и цвета
- RAISERROR - Имеет ссылку MSDN и окрашен в голубой / синий цвет
SSMS
- RAISEERROR - нет ссылки на MSDN из того, что я могу найти
прямо сейчас, и он окрашен в пурпурный цвет в SSMS
Кредит, при котором кредит должен быть получен - наблюдение за цветом было поднято пользователем Sahuagin в комментариях к вопросу выше.
Используете ли вы SQL Server 2012?
Прежде чем двигаться дальше, я думаю, что было бы справедливо заявить, что если вы используете SQL Server 2012 или выше, НЕ ИСПОЛЬЗУЙТЕ RAISERRROR! Вы должны использовать THROW .
Так в чем же разница?
Вы можете использовать RAISERROR (синий) в одном встроенном операторе, в отличие от RAISEERROR (пурпурный), который зависит от того, находится ли он внутри другого блока кода; на основе ошибки, которая возвращается. Точная синтаксическая ошибка следующая:
Неверный синтаксис рядом с 'RAISEERROR'. В ожидании разговора, ДИАЛОГ,
РАСПРЕДЕЛЕНО или СДЕЛКА.
Пример RAISERROR (один E - синий)
DECLARE @foo varchar(200)
SET @foo = ''
IF NULLIF(@foo, '') IS NULL
BEGIN
-- To fix this line, remove one "E" to read RAISERROR
RAISEERROR('Not enough Vespene Gas!', 16, 1);
RETURN -- This is required otherwise execution will continue!
END
-- You need the RETURN above or this will execute
SELECT Critical_TSqlLine = 1;
![This is what happens when I execute this block of code.](https://i.stack.imgur.com/GIxOo.jpg)
Теперь, если вы просто удалите одну букву "E" из приведенного выше кода, это будет нормально работать. Я не предоставил результаты выполнения, но если вы откроете SSMS, включите его и выполните, я гарантирую, что он будет работать.
Пример RAISEERROR (Two Es - magenta)
Я потратил слишком много времени, пытаясь понять, как использовать эту версию функции, и я не могу привести пример, где это на самом деле будет работать. Я изучил использование CONVERSATION, DIALOG, DISTRIBUTED или TRANSACTION и не смог заставить работать синтаксис. Короче говоря, не беспокойтесь об этой версии, просто используйте одну версию E. Для тех из вас, кто использует SQL Server 2012, это больше не должно вас волновать.