Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
In SQL Server 2016 (13.x) kunt u systeemeigen gecompileerde, door de gebruiker gedefinieerde functies maken en verwijderen. U kunt deze door de gebruiker gedefinieerde functies ook wijzigen. Systeemeigen compilatie verbetert de prestaties van de evaluatie van door de gebruiker gedefinieerde functies in Transact-SQL.
Wanneer u een systeemeigen gecompileerde, door de gebruiker gedefinieerde scalaire functie wijzigt, blijft de toepassing beschikbaar terwijl de bewerking wordt uitgevoerd en wordt de nieuwe versie van de functie gecompileerd.
Het maken, verwijderen en wijzigen van gebruikersgedefinieerde functies
U gebruikt de FUNCTIE CREATE om de systeemeigen gecompileerde, scalaire door de gebruiker gedefinieerde functie, de DROP FUNCTION te maken om de door de gebruiker gedefinieerde functie te verwijderen en de FUNCTIE ALTER om de functie te wijzigen. BEGIN ATOMIC WITH is vereist voor de door de gebruiker gedefinieerde functies.
Zie de volgende onderwerpen voor informatie over de ondersteunde syntaxis en eventuele beperkingen.
-
De syntaxis van DROP FUNCTIE voor inheems gecompileerde, scalaire door de gebruiker gedefinieerde functies is hetzelfde als voor geïnterpreteerde door de gebruiker gedefinieerde functies.
De opgeslagen procedure sp_recompile (Transact-SQL) kan worden gebruikt met de systeemeigen gecompileerde, door de gebruiker gedefinieerde functie scalaire. Dit leidt ertoe dat de functie opnieuw wordt gecompileerd met behulp van de definitie die bestaat in metagegevens.
In het volgende voorbeeld ziet u een scalaire UDF uit de voorbeelddatabase AdventureWorks2022 .
CREATE FUNCTION [dbo].[ufnLeadingZeros_native](@Value int)
RETURNS varchar(8)
WITH NATIVE_COMPILATION, SCHEMABINDING
AS
BEGIN ATOMIC WITH (TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'English')
DECLARE @ReturnValue varchar(8);
SET @ReturnValue = CONVERT(varchar(8), @Value);
DECLARE @i int = 0, @count int = 8 - LEN(@ReturnValue)
WHILE @i < @count
BEGIN
SET @ReturnValue = '0' + @ReturnValue;
SET @i += 1
END
RETURN (@ReturnValue);
END
Gebruikersgedefinieerde functies aanroepen
Systeemeigen gecompileerde, scalaire door de gebruiker gedefinieerde functies kunnen worden gebruikt in expressies, op dezelfde plaats als ingebouwde scalaire functies en geïnterpreteerde door de gebruiker gedefinieerde scalaire functies. Systeemeigen gecompileerde, door de gebruiker gedefinieerde scalaire functies kunnen ook worden gebruikt met de EXECUTE-instructie, in een Transact-SQL-instructie en in een systeemeigen gecompileerde opgeslagen procedure.
U kunt deze scalaire door de gebruiker gedefinieerde functies gebruiken in systeemeigen gecompileerde archiefprocedures en systeemeigen gecompileerde door de gebruiker gedefinieerde functies en waar ingebouwde functies zijn toegestaan. U kunt ook systeemeigen gecompileerde, door de gebruiker gedefinieerde functies in traditionele Transact-SQL-modules gebruiken.
U kunt deze door de gebruiker gedefinieerde scalaire functies gebruiken in de interop-modus, waar een geïnterpreteerde door de gebruiker gedefinieerde functie kan worden gebruikt. Dit gebruik is onderhevig aan beperkingen van transactie tussen containers, zoals beschreven in de sectie Ondersteunde isolatieniveaus voor transacties tussen containers in Transacties met Memory-Optimized Tabellen. Zie Accessing Memory-Optimized Tables Using Interpreted Transact-SQL voor meer informatie over de interop-modus.
Voor systeemeigen gecompileerde scalaire door de gebruiker gedefinieerde functies is een expliciete uitvoeringscontext vereist. Zie EXECUTE AS-component (Transact-SQL) voor meer informatie. EXECUTE AS CALLER wordt niet ondersteund. Zie EXECUTE (Transact-SQL)voor meer informatie.
Zie EXECUTE (Transact-SQL) voor de ondersteunde syntaxis voor Transact-SQL Execute-instructies met systeemeigen gecompileerde, scalair door de gebruiker gedefinieerde functies. Zie Ondersteunde functies voor systeemeigen gecompileerde T-SQL-modules voor de ondersteunde syntaxis voor het uitvoeren van de door de gebruiker gedefinieerde functies in een systeemeigen gecompileerde opgeslagen procedure.
Hints en parameters
Ondersteuning voor tabel-, join- en queryhints binnen systeemeigen gecompileerde, scalaire door de gebruiker gedefinieerde functies is gelijk aan ondersteuning voor deze hints voor systeemeigen gecompileerde opgeslagen procedures. Net als bij geïnterpreteerde door de gebruiker gedefinieerde scalaire functies, hebben de queryhints die zijn opgenomen in een Transact-SQL query die verwijst naar een systeemeigen gecompileerde, door de gebruiker gedefinieerde functie, geen invloed op het queryplan voor deze door de gebruiker gedefinieerde functie.
De parameters die worden ondersteund voor de systeemeigen gecompileerde, door de gebruiker gedefinieerde scalaire functies zijn alle parameters die worden ondersteund voor systeemeigen opgeslagen procedures, zolang de parameters zijn toegestaan voor scalaire door de gebruiker gedefinieerde functies. Een voorbeeld van een ondersteunde parameter is de parameter met tabelwaarde.
Schema-Bound
Het volgende is van toepassing op systeemeigen gecompileerde, scalaire door de gebruiker gedefinieerde functies.
Moet schemagebonden zijn met behulp van het argument WITH SCHEMABINDING in CREATE FUNCTION en ALTER FUNCTION.
Kan niet worden verwijderd of gewijzigd wanneer wordt verwezen naar een door een schema gebonden opgeslagen procedure of door de gebruiker gedefinieerde functie.
SHOWPLAN_XML
Systeemeigen gecompileerde, door de gebruiker gedefinieerde functies bieden ondersteuning voor SHOWPLAN_XML. Het voldoet aan het algemene SHOWPLAN_XML schema, net als bij systeemeigen gecompileerde opgeslagen procedures. Het basiselement voor de door de gebruiker gedefinieerde functies is <UDF>.
STATISTICS XML wordt niet ondersteund voor systeemeigen gecompileerde, scalaire door de gebruiker gedefinieerde functies. Wanneer u een query uitvoert die verwijst naar de door de gebruiker gedefinieerde functie, waarbij STATISTICS XML is ingeschakeld, wordt de XML-inhoud geretourneerd zonder het onderdeel voor de door de gebruiker gedefinieerde functie.
Permissions
Net als bij systeemeigen gecompileerde opgeslagen procedures, worden de machtigingen voor objecten waarnaar wordt verwezen vanuit een systeemeigen gecompileerde, door de gebruiker gedefinieerde functie gecontroleerd wanneer de functie wordt gemaakt. De FUNCTIE CREATE mislukt als de geïmiteerde gebruiker niet over de juiste machtigingen beschikt. Als wijzigingen in machtigingen ertoe leiden dat de geïmiteerde gebruiker niet langer over de juiste machtigingen beschikt, mislukken de volgende uitvoeringen van de door de gebruiker gedefinieerde functie.
Wanneer u een systeemeigen gecompileerde, scalaire door de gebruiker gedefinieerde functie in een systeemeigen gecompileerde opgeslagen procedure gebruikt, worden de machtigingen voor het uitvoeren van de door de gebruiker gedefinieerde functie gecontroleerd wanneer de buitenste procedure wordt gemaakt. Als de gebruiker die is geïmiteerd door de buitenste procedure geen EXEC-machtigingen heeft voor de door de gebruiker gedefinieerde functie, mislukt het maken van de opgeslagen procedure. Als wijzigingen in machtigingen ertoe leiden dat de gebruiker niet langer beschikt over de EXEC-machtigingen, mislukt de uitvoering van de buitenste procedure.
Zie ook
Ingebouwde functies (Transact-SQL)
Een uitvoeringsplan opslaan in XML-formaat