Condividi tramite


Eseguire funzioni definite dall'utente

Si applica a: SQL Server Database SQL di Azure

Eseguire una funzione definita dall'utente con Transact-SQL.

È necessario richiamare funzioni scalari usando almeno il nome in due parti della funzione (<schema>.<function>). Per altre informazioni, vedere CREATE FUNCTION (Transact-SQL).

Limiti

In Transact-SQL è possibile specificare parametri tramite <value> o @parameter_name = <value>. Un parametro non fa parte di una transazione. Pertanto, se un parametro viene modificato in una transazione per la quale verrà eseguito il rollback, il valore del parametro non viene ripristinato al suo valore precedente. Il valore restituito al chiamante corrisponde sempre al valore specificato al termine del modulo.

Autorizzazioni

Per eseguire l'istruzione EXECUTE non sono necessarie autorizzazioni specifiche. Sono tuttavia obbligatorie autorizzazioni per le entità a protezione diretta a cui si fa riferimento all'interno della stringa EXECUTE. Se, ad esempio, la stringa include un'istruzione INSERT, il chiamante dell'istruzione EXECUTE deve avere l'autorizzazione INSERT per la tabella di destinazione. Le autorizzazioni vengono verificate non appena viene rilevata l'istruzione EXECUTE, anche se l'istruzione EXECUTE è inclusa in un modulo. Per altre informazioni, vedere EXECUTE.

Usare Transact-SQL

Questo esempio usa la funzione a valori scalari ufnGetSalesOrderStatusText disponibile nella maggior parte delle edizioni di AdventureWorks2022. Lo scopo della funzione è di restituire un valore di testo per lo stato delle vendite da un numero intero specificato. Modificare l'esempio passando i numeri interi da 1 a 7 al parametro @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;

Ecco il risultato.

Order Status: Shipped