Почему конечный SET непоследовательно выдает ошибку в SQL?
Я смотрю на ошибку одного из наших веб-приложений, и он вызывал хранимую процедуру, которая отвечала за обновление записи в базе данных.
Эта хранимая процедура работала неделями без проблем. Затем однажды он начал выдавать ошибки, во время отладки мы обнаружили причину внутри хранимой процедуры.
Это в основном было утверждение, как это
Begin
// Do Stuff
Set
End
Итак SET
на самом деле никогда ничего не устанавливать. По какой-то причине это прекрасно работает на нашем сервере и работало на клиентском сервере до сегодняшнего дня, когда он решил начать жаловаться. (Неверная синтаксическая ошибка)
Существуют ли какие-либо настройки SQL Server, которые могут вызвать это внезапное изменение в поведении?
Разъяснение - The SET
всегда был в процедурах. И создаю SET
сам по себе или как единственное утверждение в хранимой процедуре, на самом деле работает для меня. Это проблема, она не должна работать. Так что-нибудь, что заставило бы это работать, когда это должно потерпеть неудачу?
2 ответа
Процедура с 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" само по себе приведет к ошибке. Первоначально я собирался предложить, чтобы у вас мог быть код ветвления (IFs, RETURNs, GOTO и т. Д.), Который привел к тому, что строка никогда не будет достигнута... но я обнаружил, что не могу создать хранимую процедуру, которая содержит это как одно заявление.
Если вы запишете процедуру и попытаетесь воссоздать ее (с другим именем), можно ли ее создать?
Может быть стоит опубликовать этот сценарий, или столько, сколько вам удобно.