Почему завершающий SET непоследовательно выдает ошибку в SQL?

StackOverflow https://stackoverflow.com/questions/1862008

  •  13-09-2019
  •  | 
  •  

Вопрос

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

Эта хранимая процедура работала несколько недель без проблем.Затем однажды он начал выдавать ошибки, и во время отладки мы обнаружили причину внутри хранимой процедуры.

По сути, там было такое заявление

Begin
  // Do Stuff

  Set
End

Итак SET вообще никогда ничего не устанавливал.По какой-то причине это прекрасно работает на нашем сервере и отлично работает на клиентском сервере до сегодняшнего дня, когда он решил начать жаловаться.(Неверная синтаксическая ошибка)

Есть ли какой-либо тип настройки SQL Server, который мог бы вызвать такое внезапное изменение в поведении?

Разъяснение - SET всегда был в процедурах.И запуск SET Сам по себе или как единственный оператор в хранимой процедуре действительно работает для меня.В этом проблема, это не должен работа.Итак, есть ли что-нибудь, что могло бы заставить его работать, когда оно должно выйти из строя?

Это было полезно?

Решение

Процедура с SET подобное обычно не скомпилируется, даже если SET невозможно добраться:

alter procedure dbo.testproc as
    begin
    return 1;
    set
    end

Incorrect syntax near the keyword 'SET'.

Поскольку изменение не удалось, я не понимаю, как эта процедура вообще могла оказаться в вашей базе данных?

Или, может быть, вы работали в режиме совместимости с SQL Server 2000 (который все еще позволял это). Изменение mdoe совместимости на SQL Server 2005 или более позднюю версию приведет к нарушению процедуры.

Другие советы

Выполнение «SET» само по себе приведет к ошибке.Изначально я собирался предположить, что у вас может быть код ветвления (IF, RETURN, GOTO и т. д.), из-за которого линия никогда не будет достигнута...но я обнаружил, что не могу создать хранимую процедуру, содержащую это как отдельный оператор.

Если вы создадите сценарий процедуры и попытаетесь воссоздать ее (с другим именем), можно ли ее создать?

Возможно, стоит опубликовать этот сценарий или ту его часть, которую вам удобно опубликовать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top