Кто-либо мог указать точно, где MSDN заявляет, что thet, который каждая пользовательская хранимая процедура возвращает 0 по умолчанию, если никакой ошибки не происходит? Другими словами, мог я быть уверенным что пример кода, данный ниже будучи хранимой процедурой
IF someStatement
BEGIN
RETURN 1
END
должен всегда возвращать нуль, если someStatement является ложью, и никакая ошибка не происходит?
Я знаю, что это на самом деле прокладывает себе путь, но мне не удалось найти любой явный оператор об этом от Microsoft.
Похоже, что когда-то возвращаемое значение могло что-то значить (см. Ссылку на статью о возвращаемом значении до SQL 2000 BOL ) до SQL Server 2000 . Я проверил, смогу ли я найти список этих исходных кодов возврата специально для MS SQL, и обнаружил , следующий за (хотя я не знаю его подлинности, и он не на самом деле не перечислить значения).
Итак, после прочтения всех этих статей, похоже, что @return_status - это параметр, который ВСЕГДА возвращается при выполнении хранимой процедуры (даже если вы ее не используете). Согласно статье RETURN Books в Интернете, код возврата НЕ МОЖЕТ быть нулевым.
При использовании с хранимой процедурой RETURN не может возвращать нулевое значение. Если процедура пытается вернуть нулевое значение (например, используя RETURN @status, когда @status имеет значение NULL), генерируется предупреждающее сообщение и возвращается значение 0 .
Выполнение следующего T-SQL определенно показывает это,
create Procedure Test
as
begin
DECLARE @RTN integer
Return @RTN
END
GO
Exec Test
GO
Drop Procedure Test
GO
Вы получите
The 'Test' procedure attempted to return a status of NULL, which is not allowed. A status of 0 will be returned instead.
В конце концов, похоже, что ответ таков, потому что @return_status не может быть нулевым (0, если не установлено , или установить в NULL) ...
Что касается кодов ошибок, упомянутых в предполагаемой статье BOL для SQL 7.0, я предполагаю, что это старая задержка от Sybase ... Sybase 5.0 Manual
Kris
если вы собираетесь включить какую-то логику в своем клиенте, почему бы не вернуть «0» и не сделать его более явным?
Возврат данных с использованием кода возврата из электронной документации.
Edit:
В ссылке говорится
При использовании с хранимой процедурой RETURN не может возвращать нулевое значение. Если процедура пытается вернуть нулевое значение (например, используя RETURN @status, когда @status имеет значение NULL), генерируется предупреждающее сообщение и возвращается значение 0 .
Можно сказать, что нет RETURN = RETURN NULL = RETURN 0. Но предупреждение не выдается, потому что вы не выполнили RETURN NULL
. И ожидается ноль, потому что это хранимая процедура.
Кроме того, выполнение хранимой процедуры позволяет
EXEC @rtn = uspMyProc @p1...
Итак должно быть возвращено что-то , потому что мы всегда ожидаем значение, а не NULL
Я полагался на возвращаемый ноль в течение 12 лет, даже если MSDN не говорит. Как и многие другие из нас: -)