MSDN о возвращаемом значении значения по умолчанию хранимой процедуры

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

IF someStatement
BEGIN
  RETURN 1
END

должен всегда возвращать нуль, если someStatement является ложью, и никакая ошибка не происходит?

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

9
задан marc_s 5 April 2010 в 16:03
поделиться

4 ответа

Похоже, что когда-то возвращаемое значение могло что-то значить (см. Ссылку на статью о возвращаемом значении до 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

9
ответ дан 4 December 2019 в 13:46
поделиться

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

0
ответ дан 4 December 2019 в 13:46
поделиться
-1
ответ дан 4 December 2019 в 13:46
поделиться

RETURN в MSDN

Edit:

В ссылке говорится

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

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

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

EXEC @rtn = uspMyProc @p1...

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

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

7
ответ дан 4 December 2019 в 13:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: