Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro: SQL Server
Azure SQL Database
Azure SQL Managed Instance
V SQL Serveru 2016 (13.x) můžete vytvářet a odstraňovat nativně kompilované skalární uživatelem definované funkce. Tyto uživatelem definované funkce můžete také změnit. Nativní kompilace zlepšuje výkon vyhodnocení uživatelem definovaných funkcí v jazyce Transact-SQL.
Když nativně kompilovanou skalární uživatelem definovanou funkci změníte, zůstane aplikace dostupná při spuštění operace a kompiluje se nová verze funkce.
Podporované konstrukty T-SQL najdete v tématu Podporované funkce pro nativně kompilované moduly T-SQL.
Vytváření, odstranění a změna uživatelsky definovaných funkcí
Funkci CREATE použijete k vytvoření nativně zkompilované skalární uživatelem definované funkce, funkce DROP k odebrání uživatelem definované funkce a funkce ALTER FUNCTION pro změnu funkce. Funkce BEGIN ATOMIC WITH se vyžaduje pro uživatelem definované funkce.
Informace o podporované syntaxi a jakýchkoli omezeních najdete v následujících tématech.
funkce DROP (Transact-SQL)
Syntaxe FUNKCE DROP pro nativně zkompilované skalární uživatelem definované funkce je stejná jako pro interpretované uživatelem definované funkce.
Uloženou proceduru sp_recompile (Transact-SQL) lze použít s nativně zkompilovanou skalární uživatelem definovanou funkcí. Výsledkem bude rekompilování funkce pomocí definice, která existuje v metadatech.
Následující ukázka ukazuje skalární UDF z ukázkové databáze 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
Volání uživatelsky definovaných funkcí
Nativně kompilované skalární uživatelem definované funkce lze použít ve výrazech na stejném místě jako předdefinované skalární funkce a interpretovat skalární uživatelem definované funkce. Nativně kompilované skalární uživatelem definované funkce lze také použít s příkazem EXECUTE v příkazu Transact-SQL a v nativně zkompilované uložené procedury.
Tyto skalární uživatelem definované funkce můžete použít v nativně kompilovaných procedurách úložiště a nativně kompilovaných uživatelem definovaných funkcí a všude, kde jsou povolené integrované funkce. V tradičních modulech Transact-SQL můžete také používat nativně kompilované skalární uživatelem definované funkce.
Tyto skalární uživatelem definované funkce můžete použít v režimu spolupráce, kdykoli lze použít interpretovanou skalární uživatelem definovanou funkci. Toto použití podléhá omezením pro transakce mezi kontejnery, jak je popsáno v části Podporované úrovně izolace pro transakce mezi kontejnery v Transakcích s tabulkami optimalizovanými pro paměť. Další informace o režimu spolupráce naleznete v tématu Přístup k tabulkám Memory-Optimized pomocí interpretovaného jazyka Transact-SQL.
Nativně kompilované skalární uživatelem definované funkce vyžadují explicitní kontext spuštění. Další informace naleznete v tématu EXECUTE AS – klauzule (Transact-SQL). FUNKCE EXECUTE AS CALLER není podporována. Další informace naleznete v tématu EXECUTE (Transact-SQL).
Podporovanou syntaxi pro příkazy execute Transact-SQL pro nativně kompilované skalární uživatelem definované funkce naleznete v tématu EXECUTE (Transact-SQL). Podporovanou syntaxi pro spouštění uživatelem definovaných funkcí v nativně kompilované uložené proceduře naleznete v tématu Podporované funkce pro nativně kompilované moduly T-SQL.
Rady a parametry
Podpora nápovědy tabulek, spojení a dotazů uvnitř nativně zkompilovaných skalárních uživatelem definovaných funkcí je rovna podpoře těchto tipů pro nativně zkompilované uložené procedury. Stejně jako u interpretovaných skalárních uživatelem definovaných funkcí nemají dotazové pokyny zahrnuté v dotazu Transact-SQL, který odkazuje na nativně kompilovanou, skalární uživatelsky definovanou funkci, vliv na plán dotazu pro tuto funkci.
Parametry podporované pro nativně kompilované skalární uživatelem definované funkce jsou všechny parametry podporované pro nativně kompilované uložené procedury, pokud jsou parametry povolené pro skalární uživatelem definované funkce. Příkladem podporovaného parametru je parametr s hodnotou tabulky.
Schema-Bound
Následující informace platí pro nativně zkompilované skalární uživatelem definované funkce.
Musí být vázané na schéma pomocí argumentu WITH SCHEMABINDING v CREATE FUNCTION a ALTER FUNCTION.
Nelze vynechat ani změnit, pokud je odkazován schématem vázanou uloženou procedurou nebo funkci definovanou uživatelem.
SHOWPLAN_XML
Nativně kompilované skalární uživatelem definované funkce podporují SHOWPLAN_XML. Odpovídá obecnému schématu SHOWPLAN_XML, stejně jako u nativně zkompilovaných uložených procedur. Základní prvek pro uživatelem definované funkce je <UDF>.
XML statistiky není podporován pro nativně kompilované skalární uživatelem definované funkce. Když spustíte dotaz odkazující na uživatelem definovanou funkci s povolenou funkcí STATISTICS XML, vrátí se obsah XML bez části pro uživatelem definovanou funkci.
Povolení
Stejně jako u nativně zkompilovaných uložených procedur se při vytváření funkce zkontrolují oprávnění pro objekty odkazované z nativně zkompilované skalární uživatelem definované funkce. Funkce CREATE selže, pokud zosobněný uživatel nemá správná oprávnění. Pokud změny oprávnění způsobí, že zosobněný uživatel už nemá správná oprávnění, následné spuštění uživatelem definované funkce selže.
Pokud použijete nativně zkompilovanou skalární uživatelem definovanou funkci uvnitř nativně zkompilované uložené procedury, při vytvoření vnější procedury se zkontrolují oprávnění pro spuštění uživatelem definované funkce. Pokud uživatel zosobněný vnějším postupem nemá oprávnění EXEC pro uživatelem definovanou funkci, vytvoření uložené procedury selže. Pokud změny oprávnění způsobí, že uživatel už nemá oprávnění EXEC, spuštění vnější procedury selže.
Viz také
Předdefinované funkce (Transact-SQL)
uložení plánu provádění ve formátu XML