Udostępnij za pośrednictwem


Wykonywanie funkcji zdefiniowanych przez użytkownika

Dotyczy:programu SQL ServerAzure SQL Database

Wykonaj funkcję zdefiniowaną przez użytkownika przy użyciu języka Transact-SQL.

Funkcje skalarne muszą być wywoływane przy użyciu co najmniej dwuczęściowej nazwy funkcji (<schema>.<function>). Aby uzyskać więcej informacji, zobacz CREATE FUNCTION (Transact-SQL).

Ograniczenia

W języku Transact-SQL parametry można dostarczyć przy użyciu <value> lub przy użyciu @parameter_name = <value>. Parametr nie jest częścią transakcji. W związku z tym jeśli parametr zostanie zmieniony w transakcji, która zostanie później wycofana, wartość parametru nie zostanie przywrócona do poprzedniej wartości. Wartość zwracana do elementu wywołującego jest zawsze wartością w momencie zwracania modułu.

Uprawnienia

Uprawnienia nie są wymagane do uruchomienia instrukcji EXECUTE. Jednak uprawnienia są wymagane w zabezpieczanych przywoływalnych w ciągu EXECUTE. Jeśli na przykład ciąg zawiera instrukcję INSERT, podmiot wywołujący instrukcję EXECUTE musi mieć uprawnienia INSERT na tabeli docelowej. Uprawnienia są sprawdzane w momencie napotkania instrukcji EXECUTE, nawet jeśli instrukcja EXECUTE jest uwzględniona w module. Aby uzyskać więcej informacji, zapoznaj się z EXECUTE.

Użyj Transact-SQL

W tym przykładzie użyto funkcji wartości skalarnej ufnGetSalesOrderStatusText, która jest dostępna w większości wersji AdventureWorks2022. Celem funkcji jest zwrócenie wartości tekstowej określającej stan sprzedaży na podstawie podanej liczby całkowitej. Zróżnicuj przykład, przekazując liczby całkowite od 1 do 7 do parametru @Status.

USE [AdventureWorks2022]
GO

-- Declare a variable to return the results of the function.
DECLARE @ret NVARCHAR(15);

-- Execute the function while passing a value to the @status parameter
EXEC @ret = dbo.ufnGetSalesOrderStatusText @Status = 5;

-- View the returned value.
-- The Execute and Select statements must be executed at the same time.
SELECT N'Order Status: ' + @ret;

Oto wynik.

Order Status: Shipped