In SQL Server is een scalaire UDF of scalaire door de gebruiker gedefinieerde functie een door de gebruiker gedefinieerde functie die één waarde retourneert.
Dit in tegenstelling tot een functie met tabelwaarde, die een resultaatset in de vorm van een tabel retourneert.
Door de gebruiker gedefinieerde functies kunnen worden geschreven als T-SQL UDF's of CLR (Common Language Runtime) UDF's. Met CLR kunt u UDF's maken in beheerde code met behulp van elke .NET Framework-programmeertaal. Deze functies zijn dan toegankelijk voor T-SQL of andere beheerde code.
Voorbeeld 1 – Basis scalaire UDF
Hier is een voorbeeld van de code die wordt gebruikt om een standaard T-SQL scalaire UDF te maken.
CREATE FUNCTION dbo.ufn_discountPrice( @price DECIMAL(12,2), @discount DECIMAL(12,2) ) RETURNS DECIMAL (12,2) AS BEGIN RETURN @price * (1 - @discount); END;
Deze scalaire UDF accepteert twee parameters; @price
en @discount
. Deze worden als argumenten aan de functie doorgegeven wanneer de functie wordt aangeroepen. De functie neemt de waarde van die argumenten, voert een berekening uit met die waarden en retourneert vervolgens de resulterende waarde. In dit geval wordt de kortingsprijs geretourneerd.
Voorbeeld 2 – Roep de UDF op
Nadat de UDF is gemaakt, kan deze op elk gewenst moment binnen de T-SQL-code worden aangeroepen.
Hier is een voorbeeld van het aanroepen van de UDF:
SELECT dbo.ufn_discountPrice(100, .2) AS Result;
Resultaat
+----------+ | Result | |----------| | 80.00 | +----------+
U kunt ook scalaire UDF's gebruiken in berekende kolommen. Dit kan met name handig zijn als u de berekende kolom nodig heeft om toegang te krijgen tot gegevens in een andere tabel.
Functie-opties
Wanneer u een scalaire UDF maakt, zijn er verschillende opties die u op de functie kunt toepassen.
U kunt bijvoorbeeld aangeven of het wel of niet schemagebonden moet zijn. U kunt aangeven dat het versleuteld moet worden. U kunt ook een EXECUTE AS
. specificeren om de beveiligingscontext te specificeren waaronder de door de gebruiker gedefinieerde functie wordt uitgevoerd.
Raadpleeg de Microsoft-documentatie voor een gedetailleerde lijst met opties die u kunt bieden bij het maken of wijzigen van een door de gebruiker gedefinieerde functie.
Parametergegevenstype
Voor T-SQL-functies zijn alle gegevenstypen toegestaan, inclusief door de gebruiker gedefinieerde CLR-typen en door de gebruiker gedefinieerde tabeltypen, behalve tijdstempel en de niet-scalaire cursor en tafel soorten.
Voor CLR-functies zijn alle gegevenstypen, inclusief door de gebruiker gedefinieerde CLR-typen, toegestaan, behalve tekst , ntekst , afbeelding , door de gebruiker gedefinieerde tabeltypen, tijdstempel datatypes, en de niet-scalaire cursor en tafel soorten.
Gegevenstype retourneren
Het retourgegevenstype voor T-SQL scalaire UDF's kan elk gegevenstype zijn, behalve tijdstempel en de niet-scalaire cursor en tafel soorten.
CLR-functies kunnen elk gegevenstype gebruiken, behalve tekst , ntekst , afbeelding , tijdstempel , en de niet-scalaire cursor en tafel soorten.
Zowel T-SQL- als CLR-functies kunnen een door de gebruiker gedefinieerd CLR-type hebben voor de retourwaarde.