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


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

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

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

5 57

5 ответов:

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

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

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

вот ответ из блога MSDN Йенса Зюссмейера:

вы когда-нибудь задавались вопросом, почему в Raiserror есть только одна буква "е"? То есть из старых дней Sybase, где два одинаковых символа были сокращены до одного только : -)"

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

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

ссылки и цветов

  • RAISERROR - имеет ссылку MSDN, и она окрашена в голубой / синий цвет SSMS
  • RAISEERROR - не имеет ссылки MSDN из того, что я могу находить прямо сейчас и он окрашен в пурпурный цвет в SSMS

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

вы используете SQL Server 2012?
Прежде чем я перейду, я думаю, что справедливо заявить, что если вы используете SQL Server 2012 или выше, не используйте RAISERRROR! Вы должны использовать бросить.

так какая разница?
Вы можете использовать RAISERROR (blue) в одном встроенном операторе, а не использовать RAISEERROR (magenta), который зависит от того, содержится ли он внутри другого блока кода; на основе возвращаемой ошибки. Точная синтаксическая ошибка заключается в следующем:

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

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

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

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