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
Azure Synapse Analytics
Analytics Platform System (PDW)
koncový bod SQL Analytics ve službě Microsoft Fabric
Warehouse v Microsoft Fabric
databáze SQL v Microsoft Fabric
Změní existující funkci Transact-SQL nebo CLR, která byla dříve vytvořena spuštěním CREATE FUNCTION
příkazu, beze změny oprávnění a bez ovlivnění závislých funkcí, uložených procedur nebo triggerů.
Návod
Novou funkci můžete zadat CREATE OR ALTER FUNCTION
, pokud neexistuje podle názvu nebo změnit existující funkci v jediném příkazu.
Syntaxe
-- Transact-SQL Scalar Function Syntax
ALTER FUNCTION [ schema_name. ] function_name
( [ { @parameter_name [ AS ][ type_schema_name. ] parameter_data_type
[ = default ] }
[ ,...n ]
]
)
RETURNS return_data_type
[ WITH <function_option> [ ,...n ] ]
[ AS ]
BEGIN
function_body
RETURN scalar_expression
END
[ ; ]
-- Transact-SQL Inline Table-Valued Function Syntax
ALTER FUNCTION [ schema_name. ] function_name
( [ { @parameter_name [ AS ] [ type_schema_name. ] parameter_data_type
[ = default ] }
[ ,...n ]
]
)
RETURNS TABLE
[ WITH <function_option> [ ,...n ] ]
[ AS ]
RETURN [ ( ] select_stmt [ ) ]
[ ; ]
-- Transact-SQL Multistatement Table-valued Function Syntax
ALTER FUNCTION [ schema_name. ] function_name
( [ { @parameter_name [ AS ] [ type_schema_name. ] parameter_data_type
[ = default ] }
[ ,...n ]
]
)
RETURNS @return_variable TABLE <table_type_definition>
[ WITH <function_option> [ ,...n ] ]
[ AS ]
BEGIN
function_body
RETURN
END
[ ; ]
-- Transact-SQL Function Clauses
<function_option>::=
{
[ ENCRYPTION ]
| [ SCHEMABINDING ]
| [ RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT ]
| [ EXECUTE_AS_Clause ]
}
<table_type_definition>:: =
( { <column_definition> <column_constraint>
| <computed_column_definition> }
[ <table_constraint> ] [ ,...n ]
)
<column_definition>::=
{
{ column_name data_type }
[ [ DEFAULT constant_expression ]
[ COLLATE collation_name ] | [ ROWGUIDCOL ]
]
| [ IDENTITY [ (seed , increment ) ] ]
[ <column_constraint> [ ...n ] ]
}
<column_constraint>::=
{
[ NULL | NOT NULL ]
{ PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
[ WITH FILLFACTOR = fillfactor
| WITH ( < index_option > [ , ...n ] )
[ ON { filegroup | "default" } ]
| [ CHECK ( logical_expression ) ] [ ,...n ]
}
<computed_column_definition>::=
column_name AS computed_column_expression
<table_constraint>::=
{
{ PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
( column_name [ ASC | DESC ] [ ,...n ] )
[ WITH FILLFACTOR = fillfactor
| WITH ( <index_option> [ , ...n ] )
| [ CHECK ( logical_expression ) ] [ ,...n ]
}
<index_option>::=
{
PAD_INDEX = { ON | OFF }
| FILLFACTOR = fillfactor
| IGNORE_DUP_KEY = { ON | OFF }
| STATISTICS_NORECOMPUTE = { ON | OFF }
| ALLOW_ROW_LOCKS = { ON | OFF }
| ALLOW_PAGE_LOCKS ={ ON | OFF }
}
-- CLR Scalar and Table-Valued Function Syntax
ALTER FUNCTION [ schema_name. ] function_name
( { @parameter_name [AS] [ type_schema_name. ] parameter_data_type
[ = default ] }
[ ,...n ]
)
RETURNS { return_data_type | TABLE <clr_table_type_definition> }
[ WITH <clr_function_option> [ ,...n ] ]
[ AS ] EXTERNAL NAME <method_specifier>
[ ; ]
-- CLR Function Clauses
<method_specifier>::=
assembly_name.class_name.method_name
<clr_function_option>::=
}
[ RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT ]
| [ EXECUTE_AS_Clause ]
}
<clr_table_type_definition>::=
( { column_name data_type } [ ,...n ] )
-- Syntax for In-Memory OLTP: Natively compiled, scalar user-defined function
ALTER FUNCTION [ schema_name. ] function_name
( [ { @parameter_name [ AS ][ type_schema_name. ] parameter_data_type
[ NULL | NOT NULL ] [ = default ] }
[ ,...n ]
]
)
RETURNS return_data_type
[ WITH <function_option> [ ,...n ] ]
[ AS ]
BEGIN ATOMIC WITH (set_option [ ,... n ])
function_body
RETURN scalar_expression
END
<function_option>::=
{ | NATIVE_COMPILATION
| SCHEMABINDING
| [ EXECUTE_AS_Clause ]
| [ RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT ]
}
Argumenty
schema_name
Název schématu, do kterého patří uživatelem definovaná funkce.
function_name
Uživatelem definovaná funkce, která se má změnit.
Poznámka:
Za názvem funkce se vyžadují závorky, i když není zadaný parametr.
@ parameter_name
Parametr v uživatelem definované funkci. Lze deklarovat jeden nebo více parametrů.
Funkce může mít maximálně 2 100 parametrů. Hodnota každého deklarovaného parametru musí být zadána uživatelem při provádění funkce, pokud není pro parametr definováno výchozí nastavení.
Zadejte název parametru pomocí znaku at (@) jako prvního znaku. Název parametru musí splňovat pravidla pro identifikátory. Parametry jsou pro funkci lokální; Stejné názvy parametrů lze použít i v jiných funkcích. Parametry mohou probíhat pouze konstanty; Nelze je použít místo názvů tabulek, názvů sloupců ani názvů jiných databázových objektů.
Poznámka:
ANSI_WARNINGS se při předávání parametrů v uložené proceduře, uživatelem definované funkci nebo při deklarování a nastavení proměnných v dávkovém příkazu nepoctí. Pokud je například proměnná definována jako char(3) a pak je nastavená na hodnotu větší než tři znaky, data se zkrátí na definovanou velikost a příkaz INSERT nebo UPDATE bude úspěšný.
[ type_schema_name. ] parameter_data_type
Je datový typ parametru a volitelně schéma, do kterého patří. U Transact-SQL funkcí jsou povoleny všechny datové typy, včetně uživatelsky definovaných typů CLR, s výjimkou datového typu časového razítka . U funkcí CLR jsou povoleny všechny datové typy, včetně uživatelem definovaných typů CLR, s výjimkou textu,ntextu, obrázku a datových typů časového razítka . Nescalarové typy kurzoru a tabulky nelze zadat jako datový typ parametru ve funkcích Transact-SQL nebo CLR.
Pokud není zadaný type_schema_name , databázový stroj SQL Serveru vyhledá parameter_data_type v následujícím pořadí:
Schéma, které obsahuje názvy systémových datových typů SQL Server.
Výchozí schéma aktuálního uživatele v aktuální databázi.
Schéma
dbo
v aktuální databázi.
[ = výchozí ] **
Výchozí hodnota parametru. Pokud je definována výchozí hodnota, lze funkci provést bez určení hodnoty tohoto parametru.
Poznámka:
Výchozí hodnoty parametrů lze zadat pro funkce CLR s výjimkou datových typů varchar(max) a varbinary(max ).
Pokud má parametr funkce výchozí hodnotu, musí být při volání funkce zadáno VÝCHOZÍ klíčové slovo, aby se načetla výchozí hodnota. Toto chování se liší od použití parametrů s výchozími hodnotami v uložených procedurách, ve kterých vynechání parametru znamená také výchozí hodnotu.
return_data_type
Návratová hodnota skalární uživatelem definované funkce. U Transact-SQL funkcí jsou povoleny všechny datové typy, včetně uživatelsky definovaných typů CLR, s výjimkou datového typu časového razítka . U funkcí CLR jsou povoleny všechny datové typy, včetně uživatelem definovaných typů CLR, s výjimkou textu,ntextu, obrázku a datových typů časového razítka . Nekalarové typy kurzoru a tabulky nelze zadat jako návratový datový typ ve funkcích Transact-SQL nebo CLR.
function_body
Určuje, že řada příkazů Transact-SQL, které společně nevytvářejí vedlejší efekt, například úpravu tabulky, definují hodnotu funkce. function_body se používá pouze ve skalárních funkcích a funkcích s více hodnotami tabulky.
Ve skalárních funkcích je function_body řada Transact-SQL příkazů, které jsou společně vyhodnoceny jako skalární hodnota.
V funkcích s více hodnotami tabulky function_body je řada příkazů Transact-SQL, které naplňují návratovou proměnnou TABLE.
scalar_expression
Určuje, že skalární funkce vrací skalární hodnotu.
STŮL
Určuje, že návratová hodnota funkce s hodnotou tabulky je tabulka. Do tabulkových funkcí lze předávat pouze konstanty a @local_variables .
V vložených funkcích s hodnotou tabulky je návratová hodnota TABLE definována pomocí jednoho příkazu SELECT. Vložené funkce nemají přidružené návratové proměnné.
V funkcích s více hodnotami @ tabulky je return_variable proměnnou TABLE, která se používá k ukládání a kumulování řádků, které by se měly vrátit jako hodnota funkce. @ return_variable lze zadat pouze pro Transact-SQL funkce, nikoli pro funkce CLR.
select-stmt
Jediný příkaz SELECT, který definuje návratovou hodnotu vložené funkce s hodnotou tabulky.
EXTERNÍ NÁZEV <method_specifierassembly_name.class>_name.method_name
platí pro: SQL Server 2008 (10.0.x) a novější verze.
Určuje metodu sestavení, která se má svázat s funkcí. assembly_name musí odpovídat existujícímu sestavení v SQL Serveru v aktuální databázi s viditelností. class_name musí být platný identifikátor SQL Serveru a musí existovat jako třída v sestavení. Pokud má třída kvalifikovaný název oboru názvů, který používá tečku (.) k oddělení částí oboru názvů, musí být název třídy oddělený pomocí závorek ([]) nebo uvozovek ("). method_name musí být platný identifikátor SQL Serveru a musí existovat jako statická metoda v zadané třídě.
Poznámka:
Sql Server ve výchozím nastavení nemůže spustit kód CLR. Můžete vytvářet, upravovat a odstraňovat databázové objekty, které odkazují na moduly common language runtime; Tyto odkazy však nelze spustit na SQL Serveru, dokud nepovolíte možnost clr povoleno. Pokud chcete tuto možnost povolit, použijte sp_configure.
Poznámka:
Tato možnost není k dispozici v obsažené databázi.
< > table_type_definition( { <column_definition><column_constraint> | <> computed_column_definition } [ <table_constraint> ] [ ,... n ] )
Definuje datový typ tabulky pro funkci Transact-SQL. Deklarace tabulky obsahuje definice sloupců a omezení sloupců nebo tabulek.
< > clr_table_type_definition ( { column_namedata_type } [ ,... n ] )
Platí pro: SQL Server 2008 (10.0.x) a novější, SQL Database (Preview v některých oblastech).
Definuje datové typy tabulky pro funkci CLR. Deklarace tabulky obsahuje pouze názvy sloupců a datové typy.
NULL|NOT NULL
Podporováno pouze pro nativně kompilované, skalární uživatelem definované funkce. Další informace naleznete v tématu Funkce skalárního User-Defined pro In-Memory OLTP.
NATIVE_COMPILATION
Označuje, zda je uživatelem definovaná funkce nativně kompilována. Tento argument je vyžadován pro nativně kompilované, skalární uživatelem definované funkce.
Argument NATIVE_COMPILATION je vyžadován při změně funkce a lze jej použít pouze v případě, že byla funkce vytvořena pomocí argumentu NATIVE_COMPILATION.
ZAČNĚTE ATOMICKÉ S
Podporuje se pouze pro nativně kompilované skalární uživatelem definované funkce a vyžaduje se. Další informace naleznete v tématu Atomické bloky v nativních procedurách.
SCHEMABINDING
Argument SCHEMABINDING se vyžaduje pro nativně kompilované skalární uživatelem definované funkce.
< >function_option::= a <clr_function_option>::=
Určuje, že funkce bude mít jednu nebo více následujících možností.
ŠIFROVÁNÍ
platí pro: SQL Server 2008 (10.0.x) a novější verze.
Označuje, že databázový stroj šifruje sloupce zobrazení katalogu, které obsahují text ALTER FUNCTION
příkazu. Použití šifrování zabraňuje publikování funkce jako součásti replikace SQL Serveru. Pro funkce CLR nelze zadat šifrování.
SCHEMABINDING
Určuje, že funkce je svázána s databázovými objekty, na které odkazuje. Pokud je zadána funkce SCHEMABINDING, základní objekty nelze upravit způsobem, který by ovlivnil definici funkce. Samotná definice funkce musí být nejprve upravena nebo zrušena, aby se odstranily závislosti na objektu, který má být změněn.
Vazba funkce na objekty, na které odkazuje, je odstraněna pouze v případě, že dojde k jedné z následujících akcí:
Funkce je zrušena.
Funkce je upravena pomocí příkazu ALTER s parametrem SCHEMABINDING, který není zadán.
Seznam podmínek, které musí být splněny před vazbou funkce schématu, naleznete v tématu CREATE FUNCTION (Transact-SQL).
VRÁTÍ HODNOTU NULL PŘI VSTUPU NULL | VOLÁNO NA VSTUPU NULL
Určuje OnNULLCall
atribut skalární-hodnotné funkce. Pokud není uvedeno, CALLED ON NULL INPUT
je implicitně implikováno. To znamená, že tělo funkce se spustí i v případě, že NULL
je předán jako argument.
Pokud RETURNS NULL ON NULL INPUT
je zadána ve funkci CLR, znamená to, že SQL Server může vrátit NULL
, když některý z argumentů, který obdrží, je NULL, aniž by ve skutečnosti vyvolá tělo funkce. Pokud metoda zadaná v <method_specifier> již má vlastní atribut, který označuje RETURNS NULL ON NULL INPUT
, ale ALTER FUNCTION
příkaz označuje CALLED ON NULL INPUT
, ALTER FUNCTION
příkaz má přednost. Atribut OnNULLCall
nelze zadat pro funkce s hodnotou tabulky CLR.
Klauzule EXECUTE AS
Určuje kontext zabezpečení, ve kterém je uživatelem definovaná funkce vykonána. Proto můžete určit, který uživatelský účet SQL Server použije k ověření oprávnění u všech databázových objektů, na které funkce odkazuje.
Poznámka:
Funkci EXECUTE AS nelze zadat pro vložené uživatelem definované funkce.
Další informace naleznete v tématu Klauzule EXECUTE AS (Transact-SQL)).
< >column_definition ::=
Definuje datový typ tabulky. Deklarace tabulky obsahuje definice sloupců a omezení. U funkcí CLR lze zadat pouze column_name a data_type .
column_name
Název sloupce v tabulce. Názvy sloupců musí splňovat pravidla pro identifikátory a musí být v tabulce jedinečné. column_name může obsahovat 1 až 128 znaků.
data_type
Určuje datový typ sloupce. U funkcí Transact-SQL jsou povoleny všechny datové typy, včetně uživatelsky definovaných typů CLR, s výjimkou časového razítka. U funkcí CLR jsou povoleny všechny datové typy, včetně uživatelem definovaných typů CLR, s výjimkou textu, ntextu, obrázku, znaku, varcharu, varchar(max) a časového razítka. Kurzor nescalarového typu nelze zadat jako datový typ sloupce ve funkcích Transact-SQL nebo CLR.
VÝCHOZÍ constant_expression
Určuje hodnotu zadanou pro sloupec, pokud hodnota není explicitně zadána během vložení.
constant_expression je konstanta, NULL
nebo hodnota systémové funkce. Výchozí definice lze použít u libovolného sloupce s výjimkou těch, které mají vlastnost IDENTITY. Pro funkce tabulky CLR nelze zadat výchozí hodnotu.
COLLATION_NAME COLLATE
Určuje kolaci sloupce. Pokud není uvedeno, sloupci je přiřazeno výchozí řazení databáze. Název kolace může být buď název kolace Systému Windows, nebo název kolace SQL. Seznam a další informace naleznete v tématu Název kolace systému Windows a název kolace SYSTÉMU SQL Server.
Klauzuli COLLATE lze použít ke změně kolací pouze sloupců datového typu char, varchar, nchar a nvarchar.
Funkci COLLATE nelze zadat pro funkce s hodnotami tabulky CLR.
ROWGUIDCOL
Označuje, že nový sloupec je sloupec globálního jedinečného identifikátoru řádku. Jako sloupec ROWGUIDCOL lze určit pouze jeden sloupec uniqueidentifier na tabulku. Vlastnost ROWGUIDCOL lze přiřadit pouze ke sloupci uniqueidentifier .
Vlastnost ROWGUIDCOL nevynucuje jedinečnost hodnot uložených ve sloupci. Také negeneruje automaticky hodnoty pro nové řádky vložené do tabulky. Chcete-li vygenerovat jedinečné hodnoty pro každý sloupec, použijte NEWID
funkci on INSERT
příkazy. Lze zadat výchozí hodnotu; Nelze NEWID
však zadat jako výchozí.
IDENTITA
Označuje, že nový sloupec je sloupec identity. Když je do tabulky přidán nový řádek, SQL Server poskytuje pro sloupec jedinečnou přírůstkovou hodnotu. Sloupce identity se obvykle používají společně s omezeními PRIMÁRNÍHO KLÍČE, které slouží jako jedinečný identifikátor řádku tabulky. Vlastnost IDENTITY se dá přiřadit ke sloupcům tinyint, smallint, int, bigint, decimal(p;0) nebo numeric(p;0 ). Pro každou tabulku je možné vytvořit pouze jeden sloupec identity. Vázané výchozí hodnoty a výchozí omezení nelze použít se sloupcem identity. Musíte určit jak počáteční hodnotu , tak přírůstek nebo ani jedno. Pokud není zadán žádný z nich, výchozí hodnota je (1,1).
Identitu nelze zadat pro funkce s hodnotou tabulky CLR.
semeno
Celočíselná hodnota, která má být přiřazena prvnímu řádku v tabulce.
přírůstek
Celočíselná hodnota, která se má přičíst k počáteční hodnotě pro následující řádky v tabulce.
< >column_constraint ::= a < table_constraint>::=
Definuje omezení pro určený sloupec nebo tabulku. Pro funkce CLR je jediným povoleným typem omezení hodnota NULL. Pojmenovaná omezení nejsou povolena.
NULL | NOT NULL
Určuje, zda jsou ve sloupci povoleny hodnoty null.
NULL
není výhradně omezení, ale lze jej zadat stejně jako NOT NULL
.
NOT NULL
nelze zadat pro funkce s hodnotou tabulky CLR.
PRIMÁRNÍ KLÍČ
Omezení, které vynucuje integritu entity pro zadaný sloupec prostřednictvím jedinečného indexu. V uživatelem definovaných funkcích definovaných tabulkou lze omezení PRIMÁRNÍHO KLÍČE vytvořit pouze v jednom sloupci na tabulku. PRIMÁRNÍ KLÍČ nelze zadat pro funkce s hodnotou tabulky CLR.
JEDINEČNÝ
Omezení, které poskytuje integritu entity pro zadaný sloupec nebo sloupce prostřednictvím jedinečného indexu. Tabulka může mít několik omezení UNIQUE. Parametr UNIQUE nelze zadat pro funkce s hodnotou tabulky CLR.
CLUSTERED | NECLUSTERED
Označuje, že se pro omezení PRIMARY KEY nebo UNIQUE vytvoří clusterovaný nebo neclusterovaný index. Omezení PRIMÁRNÍHO KLÍČE používají CLUSTERED a jedinečná omezení používají NONCLUSTERED.
ClusterED je možné zadat pouze pro jedno omezení. Pokud je pro omezení UNIQUE zadáno clusterED a je zadáno také omezení PRIMÁRNÍHO KLÍČE, PRIMÁRNÍ KLÍČ používá NONCLUSTERED.
ClusterED a NONCLUSTERED nelze zadat pro funkce s hodnotami tabulky CLR.
ZKONTROLUJ
Omezení, které vynucuje integritu domény omezením možných hodnot, které lze zadat do sloupce nebo sloupců. Omezení CHECK nelze zadat pro funkce s hodnotou tabulky CLR.
logical_expression
Logický výraz, který vrací hodnotu PRAVDA nebo NEPRAVDA.
< >computed_column_definition::=
Určuje počítaný sloupec. Další informace o počítaných sloupcích naleznete v tématu CREATE TABLE (Transact-SQL).
column_name
Název počítaného sloupce.
computed_column_expression
Výraz, který definuje hodnotu počítaného sloupce.
< >index_option::=
Určuje možnosti indexu primárního klíče nebo jedinečného indexu. Další informace o volbách rejstříku naleznete v tématu CREATE INDEX (Transact-SQL).
PAD_INDEX = { ON | VYPNUTO }
Určuje odsazení indexu. Výchozí hodnota je VYPNUTÁ.
FILLFACTOR = fillfactor
Určuje procentuální hodnotu, která udává, jak by měl databázový stroj zaplnit listovou úroveň každé stránky indexu během vytváření nebo změny indexu. fillfactor musí být celočíselná hodnota od 1 do 100. Výchozí hodnota je 0.
IGNORE_DUP_KEY = { ON | VYPNUTO }
Určuje chybovou odpověď, když se operace vložení pokusí vložit duplicitní hodnoty klíče do jedinečného indexu. Možnost IGNORE_DUP_KEY se vztahuje pouze na operace vložení po vytvoření nebo vytvoření indexu. Výchozí hodnota je VYPNUTÁ.
STATISTICS_NORECOMPUTE = { ON | VYPNUTO }
Určuje, zda se přepočítávají statistiky distribuce. Výchozí hodnota je VYPNUTÁ.
ALLOW_ROW_LOCKS = { ON | VYPNUTO }
Určuje, jestli jsou povolené zámky řádků. Výchozí hodnota je ZAPNUTÁ.
ALLOW_PAGE_LOCKS = { ON | VYPNUTO }
Určuje, jestli jsou povolené zámky stránek. Výchozí hodnota je ZAPNUTÁ.
Poznámky
FUNKCI ALTER FUNCTION nelze použít ke změně skalární funkce na funkci s hodnotou tabulky nebo naopak. Funkci ALTER FUNCTION také nelze použít ke změně vložené funkce na funkci s více statistiky nebo naopak. FUNKCI ALTER FUNCTION nelze použít ke změně Transact-SQL funkce na funkci CLR nebo naopak.
Následující příkazy Service Broker nelze zahrnout do definice Transact-SQL uživatelem definované funkce:
BEGIN DIALOG CONVERSATION
END CONVERSATION
GET CONVERSATION GROUP
MOVE CONVERSATION
RECEIVE
SEND
Povolení
Vyžaduje oprávnění ALTER pro funkci nebo ve schématu. Pokud funkce určuje uživatelem definovaný typ, vyžaduje oprávnění EXECUTE u typu.
V Microsoft Fabric mohou vytvářet funkce členové rolí Správce pracovního prostoru Fabric, Člen a Přispěvatel.
Související obsah
- VYTVOŘIT FUNKCI (Transact-SQL)
- funkce DROP (Transact-SQL)
- Změny schématu v publikačních databázích
- EVENTDATA (Transact-SQL)