Подтвердить что ты не робот

Почему RAISERROR ошибочно написана? Или это не так?

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

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

Я искал Google, но не нашел много на эту тему.

4b9b3361

Ответ 1

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

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

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

Ответ 3

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

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

  • 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 (Два Es - пурпурный)
Я потратил слишком много времени, пытаясь понять, как использовать эту версию функции, и я не могу привести пример, где это на самом деле будет работать. Я изучил использование CONVERSATION, DIALOG, DISTRIBUTED или TRANSACTION и не смог заставить работать синтаксис. Короче говоря, не беспокойтесь об этой версии, просто используйте одну версию E. Для тех из вас, кто использует SQL Server 2012, это больше не должно вас волновать.

Ответ 4

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

Ответ 5

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

Этот материал возвращается в историю Sybase.