Sdílet prostřednictvím


Spouštění uživatelem definovaných funkcí

platí pro:SQL Serverazure SQL Database

Spusťte uživatelem definovanou funkci pomocí jazyka Transact-SQL.

Skalární funkce musí být vyvolány alespoň názvem dvoudílné funkce (<schema>.<function>). Více informací naleznete v části CREATE FUNCTION (Transact-SQL).

Omezení

V jazyce Transact-SQL lze parametry zadat buď pomocí <value>, nebo pomocí @parameter_name = <value>. Parametr není součástí transakce. Proto pokud se parametr změní v transakci, která se později vrátí zpět, hodnota parametru se neodvrátí k předchozí hodnotě. Hodnota vrácená volajícímu je vždy hodnotou v době, když se modul vrátí.

Dovolení

Oprávnění nejsou nutná ke spuštění příkazu EXECUTE. Oprávnění jsou však vyžadována u zajišťovaných prvků referencovaných uvnitř řetězce EXECUTE. Pokud například řetězec obsahuje příkaz INSERT, musí mít volající příkazu EXECUTE oprávnění k cílové tabulce INSERT. Oprávnění se kontrolují v době, kdy je příkaz EXECUTE zjištěn, i když je příkaz EXECUTE součástí modulu. Další informace získáte odkazem na EXECUTE.

Použijte Transact-SQL

V tomto příkladu se používá skalární hodnotová funkce ufnGetSalesOrderStatusText, která je k dispozici ve většině edic AdventureWorks2022. Účelem funkce je vrátit textovou hodnotu pro stav prodeje z daného celého čísla. Změňte příklad tím, že předáte celá čísla 1 až 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;

Tady je výsledek.

Order Status: Shipped