Dela via


ALTER FUNCTION (Transact-SQL)

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL-analysslutpunkt i Microsoft FabricWarehouse i Microsoft FabricSQL-databas i Microsoft Fabric

Ändrar en befintlig Transact-SQL- eller CLR-funktion som tidigare skapades genom att köra -instruktionen CREATE FUNCTION , utan att ändra behörigheter och utan att påverka några beroende funktioner, lagrade procedurer eller utlösare.

Tips/Råd

Du kan ange CREATE OR ALTER FUNCTION om du vill skapa en ny funktion om den inte finns med det namnet eller om du ändrar en befintlig funktion i en enda instruktion.

Transact-SQL syntaxkonventioner

Syntax

-- 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 ]   
}  

Argumentpunkter

schema_name

Namnet på det schema som den användardefinierade funktionen tillhör.

function_name

Den användardefinierade funktion som ska ändras.

Anmärkning

Parenteser krävs efter funktionsnamnet även om en parameter inte har angetts.

@ parameter_name

En parameter i den användardefinierade funktionen. En eller flera parametrar kan deklareras.

En funktion kan ha högst 2 100 parametrar. Värdet för varje deklarerad parameter måste anges av användaren när funktionen körs, såvida inte ett standardvärde för parametern har definierats.

Ange ett parameternamn med hjälp av ett vidtecken (@) som det första tecknet. Parameternamnet måste följa reglerna för identifierare. Parametrarna är lokala för funktionen. Samma parameternamn kan användas i andra funktioner. Parametrar kan bara ta plats för konstanter. De kan inte användas i stället för tabellnamn, kolumnnamn eller namn på andra databasobjekt.

Anmärkning

ANSI_WARNINGS respekteras inte när parametrar skickas i en lagrad procedur, användardefinierad funktion eller när variabler deklareras och anges i en batch-instruktion. Om en variabel till exempel definieras som tecken(3) och sedan anges till ett värde som är större än tre tecken trunkeras data till den definierade storleken och INSERT- eller UPDATE-instruktionen lyckas.

[ type_schema_name. ] parameter_data_type

Är parameterdatatypen och eventuellt det schema som den tillhör. För Transact-SQL funktioner tillåts alla datatyper, inklusive användardefinierade CLR-typer, förutom tidsstämpeldatatypen . För CLR-funktioner tillåts alla datatyper, inklusive CLR-användardefinierade typer, förutom datatyperna text, ntext, bild och tidsstämpel . Markören och tabellen för icke-skalära typer kan inte anges som en parameterdatatyp i antingen Transact-SQL- eller CLR-funktioner.

Om type_schema_name inte anges söker SQL Server Database Engine efter parameter_data_type i följande ordning:

  • Schemat som innehåller namnen på SQL Server systemdatatyper.

  • Standardschemat för den aktuella användaren i den aktuella databasen.

  • Det dbo-schema i den aktuella databasen.

[ = standard ] **

Ett standardvärde för parametern. Om ett standardvärde definieras kan funktionen köras utan att ange ett värde för den parametern.

Anmärkning

Standardparametervärden kan anges för CLR-funktioner förutom datatyperna varchar(max) och varbinary(max).

När en parameter för funktionen har ett standardvärde måste nyckelordet DEFAULT anges när du anropar funktionen för att hämta standardvärdet. Det här beteendet skiljer sig från att använda parametrar med standardvärden i lagrade procedurer där utelämnande av parametern också innebär standardvärdet.

return_data_type

Returvärdet för en skalär användardefinierad funktion. För Transact-SQL funktioner tillåts alla datatyper, inklusive användardefinierade CLR-typer, förutom tidsstämpeldatatypen . För CLR-funktioner tillåts alla datatyper, inklusive CLR-användardefinierade typer, förutom datatyperna text, ntext, bild och tidsstämpel . Markören och tabellen för icke-skalära typer kan inte anges som en returdatatyp i antingen Transact-SQL- eller CLR-funktioner.

function_body

Anger att en serie Transact-SQL-instruktioner, som tillsammans inte ger någon bieffekt, till exempel att ändra en tabell, definierar funktionens värde. function_body används endast i skalära funktioner och tabellvärdesfunktioner för flera delstater.

I skalära funktioner är function_body en serie Transact-SQL satser som tillsammans utvärderas till ett skalärt värde.

I tabellvärdesfunktioner för flera delstater är function_body en serie Transact-SQL-instruktioner som fyller i en tabellreturvariabel.

scalar_expression

Anger att skalärfunktionen returnerar ett skalärt värde.

BORD

Anger att returvärdet för funktionen table-valued är en tabell. Endast konstanter och @local_variables kan skickas till tabellvärdesfunktioner.

I infogade tabellvärdesfunktioner definieras tabellreturvärdet via en enda SELECT-instruktion. Infogade funktioner har inte associerade returvariabler.

I tabellvärdesfunktioner @ för flera delstater är return_variable en TABELLvariabel som används för att lagra och ackumulera de rader som ska returneras som värdet för funktionen. @ return_variable kan endast anges för Transact-SQL funktioner och inte för CLR-funktioner.

select-stmt

Den enda SELECT-instruktionen som definierar returvärdet för en infogad tabellvärdesfunktion.

EXTERNT NAMN <method_specifier>assembly_name.class_name.method_name

gäller för: SQL Server 2008 (10.0.x) och senare versioner.

Anger metoden för en sammansättning som ska bindas till funktionen. assembly_name måste matcha en befintlig sammansättning i SQL Server i den aktuella databasen med synlighet på. class_name måste vara en giltig SQL Server-identifierare och måste finnas som en klass i sammansättningen. Om klassen har ett namnområdeskvalificerat namn som använder en punkt (.) för att separera namnområdesdelar måste klassnamnet avgränsas med hakparenteser ([]) eller citattecken (""). method_name måste vara en giltig SQL Server-identifierare och måste finnas som en statisk metod i den angivna klassen.

Anmärkning

SQL Server kan som standard inte köra CLR-kod. Du kan skapa, ändra och släppa databasobjekt som refererar till vanliga språkkörningsmoduler. Du kan dock inte köra dessa referenser i SQL Server förrän du aktiverar alternativet clr aktiverat. Om du vill aktivera alternativet använder du sp_configure.

Anmärkning

Det här alternativet är inte tillgängligt i en innesluten databas.

< > table_type_definition( { <column_definition><column_constraint> | <> computed_column_definition } [ <table_constraint> ] [ ,... n ] )

Definierar tabelldatatypen för en Transact-SQL funktion. Tabelldeklarationen innehåller kolumndefinitioner och kolumn- eller tabellbegränsningar.

< > clr_table_type_definition ( { column_namedata_type } [ ,... n ] )

Gäller för: SQL Server 2008 (10.0.x) och senare SQL Database (förhandsversion i vissa regioner).

Definierar tabelldatatyperna för en CLR-funktion. Tabelldeklarationen innehåller endast kolumnnamn och datatyper.

NULL|INTE NULL

Stöds endast för internt kompilerade, skalära användardefinierade funktioner. Mer information finns i Skalär User-Defined Functions för In-Memory OLTP.

NATIVE_COMPILATION

Anger om en användardefinierad funktion är internt kompilerad. Det här argumentet krävs för internt kompilerade, skalära användardefinierade funktioner.

Argumentet NATIVE_COMPILATION krävs när du ändrar funktionen och kan bara användas om funktionen skapades med argumentet NATIVE_COMPILATION.

BÖRJA ATOMIC MED

Stöds endast för internt kompilerade, skalära användardefinierade funktioner och krävs. Mer information finns i Atomic Blocks i Interna procedurer.

SCHEMABINDNING

Argumentet SCHEMABINDING krävs för internt kompilerade, skalära användardefinierade funktioner.

< >function_option::= och <clr_function_option>::=

Anger att funktionen har ett eller flera av följande alternativ.

KRYPTERING

gäller för: SQL Server 2008 (10.0.x) och senare versioner.

Anger att databasmotorn krypterar de katalogvykolumner som innehåller instruktionens ALTER FUNCTION text. Kryptering förhindrar att funktionen publiceras som en del av SQL Server-replikering. KRYPTERING kan inte anges för CLR-funktioner.

SCHEMABINDNING

Anger att funktionen är bunden till de databasobjekt som den refererar till. När SCHEMABINDING har angetts kan basobjekten inte ändras på ett sätt som påverkar funktionsdefinitionen. Själva funktionsdefinitionen måste först ändras eller tas bort för att ta bort beroenden på det objekt som ska ändras.

Bindningen av funktionen till de objekt som den refererar till tas bara bort när någon av följande åtgärder inträffar:

  • Funktionen tas bort.

  • Funktionen ändras med alter-instruktionen med alternativet SCHEMABINDING inte angivet.

En lista över villkor som måste uppfyllas innan en funktion kan vara schemabunden finns i CREATE FUNCTION (Transact-SQL).

RETURNERAR NULL VID NULL-INDATA | ANROPAS VID NULL-INDATA

Anger attributet för OnNULLCall en skalärvärdesfunktion. Om inget anges är det CALLED ON NULL INPUT underförstått som standard. Det innebär att funktionstexten körs även om NULL den skickas som ett argument.

Om RETURNS NULL ON NULL INPUT anges i en CLR-funktion anger den att SQL Server kan returneras NULL när något av argumenten som tas emot är NULL, utan att faktiskt anropa funktionens brödtext. Om metoden som anges i <method_specifier> redan har ett anpassat attribut som anger RETURNS NULL ON NULL INPUT, men -instruktionen ALTER FUNCTION anger CALLED ON NULL INPUT, har -instruktionen ALTER FUNCTION företräde. Attributet OnNULLCall kan inte anges för CLR-tabellvärdesfunktioner.

EXECUTE AS-sats

Anger den säkerhetskontext under vilken den användardefinierade funktionen körs. Därför kan du styra vilket användarkonto SQL Server använder för att verifiera behörigheter för alla databasobjekt som refereras av funktionen.

Anmärkning

EXECUTE AS kan inte anges för infogade användardefinierade funktioner.

Mer information finns i EXECUTE AS-satsen (Transact-SQL).

< >column_definition ::=

Definierar tabellens datatyp. Tabelldeklarationen innehåller kolumndefinitioner och begränsningar. För CLR-funktioner kan endast column_name och data_type anges.

column_name

Namnet på en kolumn i tabellen. Kolumnnamn måste följa reglerna för identifierare och måste vara unika i tabellen. column_name kan bestå av 1 till 128 tecken.

data_type

Anger kolumnens datatyp. För Transact-SQL funktioner tillåts alla datatyper, inklusive användardefinierade CLR-typer, förutom tidsstämpel. För CLR-funktioner tillåts alla datatyper, inklusive CLR-användardefinierade typer, förutom text, ntext, bild, tecken, varchar, varchar(max) och tidsstämpel. Markören av typen nonscalar kan inte anges som en kolumndatatyp i antingen Transact-SQL- eller CLR-funktioner.

FÖRVALD constant_expression

Anger det värde som anges för kolumnen när ett värde inte uttryckligen anges under en infogning. constant_expression är en konstant NULLeller ett systemfunktionsvärde. Standarddefinitioner kan tillämpas på alla kolumner förutom de som har egenskapen IDENTITY. STANDARD kan inte anges för CLR-tabellvärdesfunktioner.

SORTERA COLLATION_NAME

Anger sortering för kolumnen. Om inget anges tilldelas kolumnen standardsorteringen för databasen. Sorteringsnamnet kan vara antingen ett Windows-sorteringsnamn eller ett SQL-sorteringsnamn. En lista med och mer information finns i Windows-sorteringsnamn och SQL Server-sorteringsnamn.

COLLATE-satsen kan endast användas för att ändra sorteringarna för kolumner av datatyperna char, varchar, nchar och nvarchar .

COLLATE kan inte anges för CLR-tabellvärdesfunktioner.

ROWGUIDCOL

Anger att den nya kolumnen är en global unik identifierarkolumn för rad. Endast en unikidentifierarkolumn per tabell kan betecknas som kolumnen ROWGUIDCOL . Egenskapen ROWGUIDCOL kan endast tilldelas till en unikidentifierarkolumn .

Egenskapen ROWGUIDCOL framtvingar inte unikhet för de värden som lagras i kolumnen. Den genererar inte heller automatiskt värden för nya rader som infogas i tabellen. Om du vill generera unika värden för varje kolumn använder du NEWID funktionen på INSERT instruktioner. Ett standardvärde kan anges. Kan dock NEWID inte anges som standard.

IDENTITET

Anger att den nya kolumnen är en identitetskolumn. När en ny rad läggs till i tabellen tillhandahåller SQL Server ett unikt, inkrementellt värde för kolumnen. Identitetskolumner används vanligtvis tillsammans med PRIMARY KEY-begränsningar för att fungera som unik radidentifierare för tabellen. Egenskapen IDENTITY kan tilldelas till kolumnerna tinyint, smallint, int, bigint, decimal(p,0) eller numeriska (p,0). Endast en identitetskolumn kan skapas per tabell. Bundna standardvärden och STANDARDvillkor kan inte användas med en identitetskolumn. Du måste ange både frö och ökning eller ingetdera. Om inget av dem anges är standardvärdet (1,1).

Identitet kan inte anges för CLR-tabellvärdesfunktioner.

frö

Det heltalsvärde som ska tilldelas den första raden i tabellen.

öka

Heltalsvärdet som ska läggas till i startvärdet för efterföljande rader i tabellen.

< >column_constraint ::= och < table_constraint>::=

Definierar begränsningen för en angiven kolumn eller tabell. För CLR-funktioner är den enda begränsningstyp som tillåts NULL. Namngivna begränsningar tillåts inte.

NULL | INTE NULL

Avgör om null-värden tillåts i kolumnen. NULL är inte strikt en begränsning men kan anges precis som NOT NULL. NOT NULL kan inte anges för CLR-tabellvärdesfunktioner.

PRIMÄRNYCKEL

En begränsning som framtvingar entitetsintegritet för en angiven kolumn via ett unikt index. I användardefinierade funktioner med tabellvärde kan villkoret PRIMÄRNYCKEL endast skapas på en kolumn per tabell. PRIMÄRNYCKEL kan inte anges för CLR-tabellvärdesfunktioner.

UNIK

En begränsning som ger entitetsintegritet för en angiven kolumn eller kolumner via ett unikt index. En tabell kan ha flera UNIKA begränsningar. UNIKT kan inte anges för CLR-tabellvärdesfunktioner.

KLUSTRAD | NONCLUSTERED

Ange att ett grupperat index eller ett icke-grupperat index skapas för begränsningen PRIMÄRNYCKEL eller UNIK. Begränsningar för PRIMÄRNYCKEL använder CLUSTERED och UNIQUE-begränsningar använder NONCLUSTERED.

CLUSTERED kan endast anges för en begränsning. Om CLUSTERED har angetts för en UNIK begränsning och en PRIMARY KEY-begränsning också anges använder DEN PRIMÄRA NYCKELN NONCLUSTERED.

CLUSTERED och NONCLUSTERED kan inte anges för CLR-tabellvärdesfunktioner.

KONTROLLERA

En begränsning som framtvingar domänintegritet genom att begränsa de möjliga värden som kan anges i en kolumn eller kolumner. CHECK-begränsningar kan inte anges för CLR-tabellvärdesfunktioner.

logical_expression

Ett logiskt uttryck som returnerar TRUE eller FALSE.

< >computed_column_definition::=

Anger en beräknad kolumn. Mer information om beräknade kolumner finns i CREATE TABLE (Transact-SQL) .

column_name

Namnet på den beräknade kolumnen.

computed_column_expression

Ett uttryck som definierar värdet för en beräknad kolumn.

< >index_option::=

Anger indexalternativen för PRIMÄRNYCKEL eller UNIKT index. Mer information om indexalternativ finns i CREATE INDEX (Transact-SQL) .

PAD_INDEX = { ON | AV }

Anger indexutfyllnad. Standardvärdet är AV.

FILLFACTOR = fillfactor

Anger en procentsats som anger hur fullständig databasmotorn ska göra lövnivån för varje indexsida när index skapas eller ändras. fillfactor måste vara ett heltalsvärde från 1 till 100. Standardvärdet är 0.

IGNORE_DUP_KEY = { ON | AV }

Anger felsvaret när en infogningsåtgärd försöker infoga dubblettnyckelvärden i ett unikt index. Alternativet IGNORE_DUP_KEY gäller endast för infogningsåtgärder när indexet har skapats eller återskapats. Standardvärdet är AV.

STATISTICS_NORECOMPUTE = { ON | AV }

Anger om distributionsstatistik beräknas om. Standardvärdet är AV.

ALLOW_ROW_LOCKS = { ON | AV }

Anger om radlås tillåts. Standardvärdet är PÅ.

ALLOW_PAGE_LOCKS = { ON | AV }

Anger huruvida sidlås är tillåtna. Standardvärdet är PÅ.

Anmärkningar

ALTER FUNCTION kan inte användas för att ändra en skalärvärdesfunktion till en tabellvärdesfunktion, eller tvärtom. Alter FUNCTION kan inte heller användas för att ändra en infogad funktion till en multistatement-funktion, eller tvärtom. ALTER FUNCTION kan inte användas för att ändra en Transact-SQL funktion till en CLR-funktion eller tvärtom.

Följande Service Broker-instruktioner kan inte inkluderas i definitionen av en Transact-SQL användardefinierad funktion:

  • BEGIN DIALOG CONVERSATION
  • END CONVERSATION
  • GET CONVERSATION GROUP
  • MOVE CONVERSATION
  • RECEIVE
  • SEND

Behörigheter

Kräver ALTER-behörighet för funktionen eller i schemat. Om funktionen anger en användardefinierad typ kräver körbehörighet för typen.

I Microsoft Fabric kan medlemmar i infrastrukturarbetsytans administratörs-, medlems- och deltagarroller skapa funktioner.