Sdílet prostřednictvím


ALTER FUNCTION (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)koncový bod SQL Analytics ve službě Microsoft FabricWarehouse v Microsoft Fabricdatabá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.

Transact-SQL konvence syntaxe

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, NULLnebo 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.