Отличается ли использование ключевого слова return в функции от хранимой процедуры?

#sql #sql-server #tsql

#sql #sql-сервер #tsql

Вопрос:

Насколько я понимаю, использование RETURN ключевого слова вызывает выход из хранимой процедуры. Я предполагал, что с функцией будет то же самое, пока не столкнулся с этим кодом. В приведенной ниже функции не отображается, что RETURN она используется так же, как обычно используется в хранимой процедуре (в противном случае SQL вышел бы из функции до того, как был достигнут оператор select). Не мог бы кто-нибудь уточнить, что используется RETURN в следующей функции?

  CREATE FUNCTION udfOrderInShipCountry (
    @shipCountry nvarchar(15)
)
RETURNS TABLE
AS
RETURN
    SELECT
        [OrderID],
        [CustomerID],
        [EmployeeID],
        [OrderDate],
        [Freight],
        [ShipName],
        [ShipAddress],
        [ShipPostalCode],
        [ShipCountry]
    FROM
        [Northwind].[dbo].[Orders]
    WHERE
        ShipCountry = @shipCountry



--Calling the table-valued function
SELECT 
    * 
FROM 
    udfOrderInShipCountry('Mexico');
 

Комментарии:

1. В функции return возвращает данные, как описано в официальных документах , которые всегда должны быть вашим первым портом захода.

2. Да, RETURN отличается. RETURN является индикатором состояния для a PROCEDURE , однако для функции он возвращает тип, определенный FUNCTION .

Ответ №1:

Я не уверен, что вас смущает. В функции return возвращает значение функции.

Это пример функции с табличным значением — фактически определенного типа, называемой встроенной табличной функцией. Возвращает return результат запроса в виде таблицы для вызывающего запроса.

Либо в хранимой процедуре, либо в функции return останавливает выполнение и возвращает управление вызывающей стороне. Однако возвращаемое значение немного отличается:

  • Хранимая процедура может возвращать целочисленное значение в качестве статуса, но статус может использоваться только в том случае, если он присвоен переменной в exec инструкции.
  • Скалярная функция может возвращать любое отдельное значение и может использоваться везде, где можно использовать скалярное выражение.
  • Функция с табличным значением возвращает таблицу и может использоваться только в from предложении запроса.