Почему RAISERROR написан с ошибкой? Или нет? - PullRequest
60 голосов
/ 12 мая 2010

Почему не RAISERROR пишется RAISEERROR? Где вторая Е? Я мог бы понять, если бы это было какое-то древнее ограничение длины ключевого слова, но я не ожидал бы, что это будет ограничение в девять символов.

Является ли RAIS или RROR техническим словом, означающим, что "повысить ошибку" - просто неверное прочтение? Его (непосредственное) происхождение на другом языке?

Я искал в Google, но мало что нашел по этому вопросу.

Ответы [ 5 ]

12 голосов
/ 12 мая 2010

Интересно - я, честно говоря, никогда даже не замечал этого раньше.

Я подозреваю, что это ранний недосмотр, который просто никогда не исправлялся, хотя я немного удивлен, что позже не была добавлена ​​поддержка для RAISEERROR, с ошибочным написанием, оставленным для совместимости.

Обновление: по-видимому, даже существует некоторая внутренняя путаница относительно того, что это должно быть - проверьте этот запрос на соединение , хотя MSFT не ответил на него.

8 голосов
/ 31 мая 2016

У меня был тот же вопрос, поэтому я наткнулся на этот пост. Из того, что я вижу, на самом деле есть различие, и написание не единственное, что отличается между этими двумя случаями. Эти две функции не эквивалентны из-за использования.

Ссылки и цвета

  • 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.

Теперь, если вы просто удалите одну букву "E" из приведенного выше кода, это будет нормально работать. Я не предоставил результаты выполнения, но если вы откроете SSMS, включите его и выполните, я гарантирую, что он будет работать.

Пример RAISEERROR (Two Es - magenta)
Я потратил слишком много времени, пытаясь понять, как использовать эту версию функции, и я не могу привести пример, где это на самом деле будет работать. Я изучил использование CONVERSATION, DIALOG, DISTRIBUTED или TRANSACTION и не смог заставить работать синтаксис. Короче говоря, не беспокойтесь об этой версии, просто используйте одну версию E. Для тех из вас, кто использует SQL Server 2012, это больше не должно вас волновать.

8 голосов
/ 07 июня 2013

Вот ответ из блога Jens Suessmeyer в MSDN:

«Когда-нибудь задавали себе вопрос, почему в Raiserror есть только одна буква« e »?:-) "

http://blogs.msdn.com/b/jenss/archive/2009/05/11/getting-feedback-progress-from-batches-and-stored-procedures.aspx

5 голосов
/ 12 мая 2010

почему до сих пор существует TIMESTAMP тип данных? поддержка старых версий. Кто-то из Sybase давно решил сделать его RAISERROR, а не RAISEERROR, когда Microsoft заключила сделку с Sybase , и они продолжили тенденцию.

3 голосов
/ 12 мая 2010

Я полагаю, что это намеренно, потому что на самом деле легче читать RAISERROR против RAISEERROR.(см. также sp_helprotect для другого примера), особенно когда нет различий, основанных на регистре.

Этот материал восходит к истории Sybase.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...