Подтвердить что ты не робот

Сохраненная процедура, когда использовать параметр вывода vs Возвращаемая переменная

Когда вы используете выходной параметр vs возвращаемую переменную или наоборот? В следующем простом примере я могу добиться того же, используя один из них.

Использование выходного параметра

create proc dbo.TestOutput (@InValue int, @OutValue int output)
as
set @OutValue = @InValue

declare @x int
exec TestOutput @InValue = 3, @OutValue = @x output
select @x 

Использование возвращаемой переменной:

create proc dbo.TestReturn (@InValue int)
as
return @InValue

declare @x int
exec @x = TestReturn @InValue = 3
select @x 

Как вы можете видеть, они оба делают то же самое. Может ли кто-нибудь показать мне пример, где выбор выходного параметра vs возвращаемой переменной будет иметь значение?

4b9b3361

Ответ 1

Я предпочитаю:

Использование возвращаемого значения, когда вам нужно только вернуть один элемент.

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

Другим распространенным шаблоном использования, хотя и не моим предпочтением, является использование возвращаемых значений только для информирования об успехах или неудачах и параметрах вывода для чего-либо, что необходимо вернуть.

Ответ 2

Это T-SQL, а не C. Никогда не используйте возвращаемые значения, многие API-интерфейсы на стороне клиента делают обращение с возвращаемыми значениями болью, если это невозможно. Всегда используйте параметры OUTPUT.

Ответ 3

Так как возвращаемые значения работают только с int, он оказывается "непоследовательным". Я предпочитаю выходной параметр для согласованности.

Кроме того, выходные параметры заставляют вызывающего абонента распознавать возвращаемое значение. IME, возвращаемые значения обычно игнорируются.

Ответ 4

Вы должны использовать RETURN для возврата значения из процедуры так же, как вы бы использовали EXIT, чтобы вернуть значение в пакетном script. Возврат не предназначен для передачи параметров, а скорее как выход из процедуры или запроса. По Документация MSDN:

Если не указано иное, все системные хранимые процедуры возвращают значение 0. Это указывает на успех, а ненулевое значение указывает на отказ.

Это становится более очевидным, если вы признаете отсутствие какой-либо способности определять тип возвращаемого значения. Он должен быть INT.

Ответ 5

Я отвечу на этот вопрос по-разному:

Если вы хотите вернуть одно значение, у вас есть оба параметра. Но если вы хотите вернуть несколько значений, вам нужно будет только использовать выходные параметры.

Второй сценарий: на С# у вас есть тип управления, если вы используете выходные параметры.

Третий сценарий: функция против процедуры выбирает ту, которая соответствует вашим потребностям.

Надеюсь, что это поможет

Ответ 6

взято из здесь

  • Если вы хотите вернуть один или несколько элементов с типом данных, лучше использовать выходной параметр.
  • Как правило, используйте выходной параметр для всего, что нужно вернуть.
  • Если вы хотите вернуть только один элемент с целым типом данных, лучше использовать возвращаемое значение.
  • Как правило, возвращаемое значение должно только сообщать об успехе или неудаче хранимой процедуры.
  • Элемент возврата возвращается значение 0 указывает на успех, а любое ненулевое значение указывает на сбой.

Ответ 7

Я использую возвращаемое значение для многих вещей, потому что он более перформативный, например:

1 - Когда вы вставляете или меняете элемент, когда я выполняю проверку в базе данных. Возвращаем положительное число, чтобы вернуть идентификатор и отрицательный номер с ошибкой. Это быстрее.

2- Когда я назначаю встречу с пейджингом, используйте ее, чтобы вернуть общий объем записей, также быстрее и дешевле. В остальном я использую Output, когда есть несколько возвратов или разные типы int. И, конечно, я использую recorset для возврата списка элементов

Как использовать Dapper для выполнения моих запросов, которые я не страдаю.