Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
I SQL Server 2016 (13.x) kan du skapa och släppa inbyggda, skalära användardefinierade funktioner. Du kan också ändra dessa användardefinierade funktioner. Intern kompilering förbättrar prestanda för utvärderingen av användardefinierade funktioner i Transact-SQL.
När du ändrar en inbyggt kompilerad, skalär användardefinierad funktion förblir programmet tillgängligt medan åtgärden körs och den nya versionen av funktionen kompileras.
Information om T-SQL-konstruktioner som stöds finns i Funktioner som stöds för internt kompilerade T-SQL-moduler.
Skapa, ta bort och ändra användardefinierade funktioner
Du använder FUNKTIONEN CREATE för att skapa den internt kompilerade, skalära användardefinierade funktionen, DROP-funktionen för att ta bort den användardefinierade funktionen och ALTER-funktionen för att ändra funktionen. BEGIN ATOMIC WITH krävs för de användardefinierade funktionerna.
Information om syntaxen som stöds och eventuella begränsningar finns i följande avsnitt.
-
DROP-FUNKTIONssyntaxen för internt kompilerade, skalära användardefinierade funktioner är densamma som för tolkade användardefinierade funktioner.
Den lagrade proceduren sp_recompile (Transact-SQL) kan användas med den inbyggda, skalära användardefinierade funktionen. Det resulterar i att funktionen omkompileras med hjälp av definitionen som finns i metadata.
Följande exempel visar en skalär UDF från AdventureWorks2022-exempeldatabasen .
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
Anropa användardefinierade funktioner
Inbyggt kompilerade, skalära användardefinierade funktioner kan användas i uttryck, på samma plats som inbyggda skalärfunktioner och tolkade skalära användardefinierade funktioner. Inbyggt kompilerade, skalära användardefinierade funktioner kan också användas med EXECUTE-instruktionen, i en Transact-SQL-instruktion och i en internt kompilerad lagrad procedur.
Du kan använda dessa skalära användardefinierade funktioner i inbyggda kompilerade arkivprocedurer och inbyggda kompilerade användardefinierade funktioner, och där inbyggda funktioner tillåts. Du kan också använda inbyggt kompilerade, skalära användardefinierade funktioner i traditionella Transact-SQL moduler.
Du kan använda dessa skalära användardefinierade funktioner i interopläge, där en tolkad skalär användardefinierad funktion kan användas. Den här användningen omfattas av transaktionsbegränsningar mellan containrar enligt beskrivningen i avsnittet Isoleringsnivåer för stödda transaktioner mellan containrar i Transaktioner med minnesoptimerade tabeller. För mer information om läget för interoperabilitet, se Åtkomst av minnesoptimerade tabeller med tolkat Transact-SQL.
Inbyggda, skalära användardefinierade funktioner kräver en explicit körningskontext. Mer information finns i EXECUTE AS-satsen (Transact-SQL). EXECUTE AS CALLER stöds inte. Mer information finns i EXECUTE (Transact-SQL).
Den syntax som stöds för Transact-SQL Execute-instruktioner finns i EXECUTE (Transact-SQL)) för inbyggda, skalära användardefinierade funktioner. Den syntax som stöds för körning av användardefinierade funktioner i en internt kompilerad lagrad procedur finns i Funktioner som stöds för internt kompilerade T-SQL-moduler.
Tips och parametrar
Stöd för tabell-, kopplings- och frågetips i inbyggda kompilerade, skalära användardefinierade funktioner är lika med stöd för dessa tips för internt kompilerade lagrade procedurer. Precis som med tolkade skalära användardefinierade funktioner påverkar frågetipsen som ingår i en Transact-SQL fråga som refererar till en internt kompilerad, skalär användardefinierad funktion inte frågeplanen för den här användardefinierade funktionen.
Parametrarna som stöds för inbyggda, skalära användardefinierade funktioner är alla parametrar som stöds för internt kompilerade lagrade procedurer, så länge parametrarna tillåts för skalära användardefinierade funktioner. Ett exempel på en parameter som stöds är parametern table-valued.
Schema-Bound
Följande gäller för internt kompilerade, skalära användardefinierade funktioner.
Måste vara schemabunden med argumentet WITH SCHEMABINDING i CREATE FUNCTION och ALTER FUNCTION.
Det går inte att släppa eller ändra när det refereras till av en schemabunden lagrad procedur eller användardefinierad funktion.
SHOWPLAN_XML
Inbyggda, skalära användardefinierade funktioner stöder SHOWPLAN_XML. Det överensstämmer med det allmänna SHOWPLAN_XML-schemat, precis som för inbyggt kompilerade lagrade procedurer. Baselementet för de användardefinierade funktionerna är <UDF>.
STATISTICS XML stöds inte för internt kompilerade, skalära användardefinierade funktioner. När du kör en fråga som refererar till den användardefinierade funktionen, med STATISTICS XML aktiverat, returneras XML-innehållet utan delen för den användardefinierade funktionen.
Permissions
Precis som med inbyggda kompilerade lagrade procedurer kontrolleras behörigheterna för objekt som refereras från en internt kompilerad, skalär användardefinierad funktion när funktionen skapas. FUNKTIONEN CREATE misslyckas om den personifierade användaren inte har rätt behörigheter. Om behörighetsändringar leder till att den personifierade användaren inte längre har rätt behörigheter misslyckas efterföljande körningar av den användardefinierade funktionen.
När du använder en inbyggt kompilerad, skalär användardefinierad funktion i en inbyggt kompilerad lagrad procedur kontrolleras behörigheterna för att köra den användardefinierade funktionen när den yttre proceduren skapas. Om användaren som personifieras av den yttre proceduren inte har EXEC-behörigheter för den användardefinierade funktionen misslyckas skapandet av den lagrade proceduren. Om behörighetsändringar leder till att användaren inte längre har EXEC-behörigheter misslyckas körningen av den yttre proceduren.
Se även
Inbyggda funktioner (Transact-SQL)
Spara en körningsplan i XML-format