Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
W programie SQL Server 2016 (13.x) można tworzyć i usuwać natywnie skompilowane, skalarne funkcje zdefiniowane przez użytkownika. Można również zmienić te funkcje zdefiniowane przez użytkownika. Kompilacja natywna poprawia wydajność oceny funkcji zdefiniowanych przez użytkownika w języku Transact-SQL.
Po zmianie natywnie skompilowanej, skalarnej funkcji zdefiniowanej przez użytkownika aplikacja pozostaje dostępna podczas uruchamiania operacji, a nowa wersja funkcji jest kompilowana.
Aby uzyskać informacje o obsługiwanych konstrukcjach języka T-SQL, zobacz Obsługiwane funkcje dla natywnie skompilowanych modułów języka T-SQL.
Tworzenie, usuwanie i modyfikowanie funkcji zdefiniowanych przez użytkownika
Funkcja CREATE służy do tworzenia natywnie skompilowanej, skalarnej funkcji zdefiniowanej przez użytkownika, funkcji DROP w celu usunięcia funkcji zdefiniowanej przez użytkownika oraz funkcji ALTER w celu zmiany funkcji. FUNKCJA BEGIN ATOMIC WITH jest wymagana dla funkcji zdefiniowanych przez użytkownika.
Aby uzyskać informacje o obsługiwanej składni i wszelkich ograniczeniach, zobacz następujące tematy.
-
Składnia FUNKCJI DROP dla natywnie skompilowanych, skalarnych funkcji zdefiniowanych przez użytkownika jest taka sama jak w przypadku interpretowanych funkcji zdefiniowanych przez użytkownika.
Procedura składowana sp_recompile (Transact-SQL) może być używana z natywnie skompilowaną, skalarną funkcją zdefiniowaną przez użytkownika. Spowoduje to ponowne skompilowane działanie funkcji przy użyciu definicji, która istnieje w metadanych.
W poniższym przykładzie przedstawiono skalarną UDF ze zbioru danych przykładowych 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
Wywoływanie funkcji zdefiniowanych przez użytkownika
Natywnie skompilowane, skalarne funkcje zdefiniowane przez użytkownika mogą być używane w wyrażeniach w tym samym miejscu co wbudowane funkcje skalarne i interpretowane funkcje zdefiniowane przez użytkownika skalarne. Natywnie skompilowane, skalarne funkcje zdefiniowane przez użytkownika mogą być również używane z instrukcją EXECUTE w instrukcji Transact-SQL i w natywnie skompilowanej procedurze składowanej.
Można użyć tych funkcji zdefiniowanych przez użytkownika skalarnych w natywnie skompilowanych procedurach przechowywania i natywnie skompilowanych funkcjach zdefiniowanych przez użytkownika oraz wszędzie tam, gdzie są dozwolone wbudowane funkcje. Można również używać natywnie skompilowanych, skalarnych funkcji zdefiniowanych przez użytkownika w tradycyjnych modułach Transact-SQL.
Można użyć tych skalarnych funkcji zdefiniowanych przez użytkownika w trybie międzyoperacyjnym, gdzie można stosować funkcję interpretowaną. To użycie podlega ograniczeniom transakcji między kontenerami, zgodnie z opisem w sekcji Obsługiwane poziomy izolacji dla transakcji między kontenerami w temacie Transakcje z tabelami Memory-Optimized. Aby uzyskać więcej informacji na temat trybu interop, zobacz Uzyskiwanie dostępu do tabel pamięciowo-optymalizowanych przy użyciu interpretowanego języka Transact-SQL.
Natywnie skompilowane, skalarne funkcje zdefiniowane przez użytkownika wymagają jawnego kontekstu wykonywania. Aby uzyskać więcej informacji, zobacz EXECUTE AS Clause (Transact-SQL). FUNKCJA EXECUTE AS CALLER nie jest obsługiwana. Aby uzyskać więcej informacji, zobacz EXECUTE (Transact-SQL).
Aby uzyskać obsługiwaną składnię instrukcji Transact-SQL Execute dla skalarnych funkcji zdefiniowanych przez użytkownika, które są natywnie kompilowane, zobacz EXECUTE (Transact-SQL). Aby uzyskać obsługiwaną składnię wykonywania funkcji zdefiniowanych przez użytkownika w natywnie skompilowanej procedurze składowanej, zobacz Obsługiwane funkcje dla natywnie skompilowanych modułów języka T-SQL.
Wskazówki i parametry
Obsługa wskazówek dotyczących tabel, sprzężeń i zapytań wewnątrz natywnie skompilowanych, skalarnych funkcji zdefiniowanych przez użytkownika jest równa obsłudze tych wskazówek dla natywnie skompilowanych procedur składowanych. Podobnie jak w przypadku interpretowanych funkcji zdefiniowanych przez użytkownika, wskazówki dotyczące zapytań zawarte w zapytaniu Transact-SQL odwołujące się do natywnie skompilowanej, skalarnej funkcji zdefiniowanej przez użytkownika nie mają wpływu na plan zapytania dla tej funkcji zdefiniowanej przez użytkownika.
Parametry obsługiwane dla natywnie skompilowanych, skalarnych funkcji zdefiniowanych przez użytkownika są wszystkimi parametrami obsługiwanymi dla natywnie skompilowanych procedur składowanych, o ile parametry są dozwolone dla funkcji zdefiniowanych przez użytkownika skalarnego. Przykładem obsługiwanego parametru jest parametr tabelaryczny.
Schema-Bound
Poniższe zasady dotyczą natywnie skompilowanych, skalarnych funkcji zdefiniowanych przez użytkownika.
Musi być powiązana schematem przy użyciu argumentu WITH SCHEMABINDING w funkcji CREATE i FUNKCJI ALTER.
Nie można usunąć ani zmienić, jeśli są odniesieniami do związanej ze schematem procedury składowanej lub funkcji zdefiniowanej przez użytkownika.
SHOWPLAN_XML
Natywnie skompilowane skalarne funkcje zdefiniowane przez użytkownika obsługują SHOWPLAN_XML. Jest on zgodny z ogólnym schematem SHOWPLAN_XML, podobnie jak w przypadku natywnie skompilowanych procedur składowanych. Podstawowym elementem funkcji zdefiniowanych przez użytkownika jest <UDF>.
KOD XML STATYSTYKI nie jest obsługiwany dla natywnie skompilowanych, skalarnych funkcji zdefiniowanych przez użytkownika. Po uruchomieniu zapytania odwołującego się do funkcji zdefiniowanej przez użytkownika z włączoną funkcją STATISTICS XML zawartość XML jest zwracana bez części funkcji zdefiniowanej przez użytkownika.
Permissions
Podobnie jak w przypadku natywnie skompilowanych procedur składowanych, uprawnienia do obiektów, do których odwołuje się natywnie skompilowana funkcja skalarna zdefiniowana przez użytkownika, są sprawdzane podczas tworzenia funkcji. Funkcja CREATE kończy się niepowodzeniem, jeśli personifikowany użytkownik nie ma odpowiednich uprawnień. Jeśli zmiany uprawnień spowodują, że personifikowany użytkownik nie ma już odpowiednich uprawnień, kolejne wykonania funkcji zdefiniowanej przez użytkownika kończą się niepowodzeniem.
W przypadku korzystania z natywnie skompilowanej, skalarnej funkcji zdefiniowanej przez użytkownika wewnątrz natywnie skompilowanej procedury składowanej uprawnienia do wykonywania funkcji zdefiniowanej przez użytkownika są sprawdzane podczas tworzenia procedury zewnętrznej. Jeśli użytkownik personifikowany przez procedurę zewnętrzną nie ma uprawnień EXEC dla funkcji zdefiniowanej przez użytkownika, tworzenie procedury składowanej kończy się niepowodzeniem. Jeśli zmiany uprawnień spowodują, że użytkownik nie ma już uprawnień EXEC, wykonanie procedury zewnętrznej zakończy się niepowodzeniem.
Zobacz też
Wbudowane funkcje (Transact-SQL)
zapisz plan wykonywania w formacie XML