Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL-analysslutpunkt i Microsoft Fabric
Warehouse i Microsoft Fabric
SQL-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 NULL
eller 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.