Delen via


Door de gebruiker gedefinieerde functies uitvoeren

van toepassing op:SQL ServerAzure SQL Database-

Voer een door de gebruiker gedefinieerde functie uit met Behulp van Transact-SQL.

Scalaire functies moeten worden aangeroepen met ten minste de tweedelige naam van de functie (<schema>.<function>). Zie CREATE FUNCTION (Transact-SQL)voor meer informatie.

Beperkingen

In Transact-SQL kunnen parameters worden opgegeven met behulp van <value> of met behulp van @parameter_name = <value>. Een parameter maakt geen deel uit van een transactie. Als een parameter daarom wordt gewijzigd in een transactie die later wordt teruggedraaid, wordt de waarde van de parameter niet teruggezet naar de vorige waarde. De waarde die naar de aanroeper wordt geretourneerd, is altijd de waarde op het moment dat de module wordt geretourneerd.

Machtigingen

Machtigingen zijn niet vereist om de instructie EXECUTE uit te voeren. Machtigingen zijn echter vereist voor de beveiligingselementen waarnaar in de EXECUTE tekenreeks wordt verwezen. Als de tekenreeks bijvoorbeeld een verklaring INSERT bevat, moet de aanroeper van de EXECUTE-verklaring INSERT machtiging hebben op de doeltabel. Machtigingen worden gecontroleerd op het moment dat EXECUTE instructie wordt aangetroffen, zelfs als de EXECUTE instructie is opgenomen in een module. Zie EXECUTEvoor meer informatie.

Gebruik Transact-SQL

In dit voorbeeld wordt de scalaire functie ufnGetSalesOrderStatusText gebruikt die beschikbaar is in de meeste edities van AdventureWorks2022. Het doel van de functie is om een tekstwaarde te retourneren voor de verkoopstatus van een bepaald geheel getal. Het voorbeeld variƫren door gehele getallen 1 tot en met 7 door te geven aan de parameter @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;

Dit is het resultaat.

Order Status: Shipped