MSDN о возвращаемом значении хранимой процедуры по умолчанию - PullRequest
9 голосов
/ 05 апреля 2010

Может ли кто-нибудь указать точно, где MSDN говорит, что каждая хранимая процедура пользователя возвращает 0 по умолчанию, если не происходит ошибки? Другими словами, могу ли я быть уверен, что приведенный ниже пример кода является хранимой процедурой

IF someStatement
BEGIN
  RETURN 1
END

всегда должен возвращать ноль, если someStatement имеет значение false и ошибки не возникает?

Я знаю, что на самом деле это работает, но мне не удалось найти какого-либо явного заявления об этом от Microsoft.

Ответы [ 4 ]

9 голосов
/ 05 апреля 2010

Похоже, что когда-то возвращаемое значение могло что-то значить (см. Ссылку на SQL 2000 BOL возвращаемое значение ) до SQL Server 2000. Я проверил, могу ли я найти список этих оригинальных кодов возврата специально для MS SQL, и обнаружил после (хотя я не знаю его подлинность, и он фактически не перечисляет значения ).

Итак, после прочтения всех этих статей похоже, что @return_status - это параметр, который ВСЕГДА возвращается при выполнении хранимой процедуры (даже если вы ее не используете). Согласно статье RETURN Books, код возврата не может быть нулевым.

При использовании с хранимой процедурой, ВОЗВРАТ не может вернуть нулевое значение. Если процедура пытается вернуть ноль значение (например, с помощью 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

Kris

7 голосов
/ 05 апреля 2010

ВОЗВРАТ на MSDN

Edit:

Ссылка говорит

При использовании с хранимой процедурой, ВОЗВРАТ не может вернуть нулевое значение. Если процедура пытается вернуть ноль значение (например, с помощью RETURN @status, когда @status имеет значение NULL), предупреждение генерируется и возвращается значение 0.

Можно сказать, что нет RETURN = RETURN NULL = RETURN 0. Но предупреждение не выдается, потому что вы не запустили RETURN NULL. И ожидается ноль, потому что это хранимая процедура.

Кроме того, выполнение хранимых процедур позволяет

EXEC @rtn = uspMyProc @p1...

Итак, что-то должно быть возвращено, потому что мы всегда ожидаем значение, а не NULL

Я рассчитывал на возврат нуля в течение 12 лет, даже если MSDN не говорит. Как и многие другие из нас: -)

0 голосов
/ 05 апреля 2010
0 голосов
/ 05 апреля 2010

если вы собираетесь переключить какую-то логику на это в своем клиенте, почему бы не вернуть «0» и сделать это более явным?

...