#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
является индикатором состояния для aPROCEDURE
, однако для функции он возвращает тип, определенныйFUNCTION
.
Ответ №1:
Я не уверен, что вас смущает. В функции return
возвращает значение функции.
Это пример функции с табличным значением — фактически определенного типа, называемой встроенной табличной функцией. Возвращает return
результат запроса в виде таблицы для вызывающего запроса.
Либо в хранимой процедуре, либо в функции return
останавливает выполнение и возвращает управление вызывающей стороне. Однако возвращаемое значение немного отличается:
- Хранимая процедура может возвращать целочисленное значение в качестве статуса, но статус может использоваться только в том случае, если он присвоен переменной в
exec
инструкции. - Скалярная функция может возвращать любое отдельное значение и может использоваться везде, где можно использовать скалярное выражение.
- Функция с табличным значением возвращает таблицу и может использоваться только в
from
предложении запроса.