sql >> Databasteknik >  >> RDS >> Sqlserver

Introduktion till användardefinierade funktioner i SQL Server

SQL Server levereras med en samling inbyggda funktioner som gör att du kan utföra en mängd olika operationer. Varje inbyggd funktion tjänar ett specifikt syfte och kan inte ändras. Om en funktion tjänar ditt syfte kan du gå vidare och använda den.

Men vad händer om du inte kan hitta en funktion som tjänar ditt syfte?

Då är det dags att skriva din egen användardefinierade funktion.

Vad är en användardefinierad funktion?

En användardefinierad funktion (UDF) är en rutin som kan ta parametrar, utföra beräkningar eller andra åtgärder och returnera ett resultat. Och som namnet antyder är det definierat och skapat av användaren. I det här fallet är "användaren" SQL-programmeraren, DBA, eller den som skrev funktionen.

Termen användardefinierad funktion skiljer den från de inbyggda funktionerna som levereras med SQL Server.

Du kan ange om UDF kommer att acceptera några parametrar eller inte, och i så fall deras namn, datatyper etc. Du kan till exempel skriva en UDF som accepterar ett produkt-ID som ett argument. Funktionen kan sedan använda det i sin beräkning. Det betyder att utdata från funktionen kommer att bero på indata som tillförs den när den anropas.

När en UDF har skapats kan den anropas.

Anropar en användardefinierad funktion

Koden inuti funktionen exekveras inte när funktionen skapas. Den körs bara när funktionen anropas .

Att "anropa" en funktion kallas ibland för att "anropa" en funktion. Det är då du får funktionen att göra vad den är gjord för att göra. I grund och botten skapar du en funktion och sedan sitter den där och väntar på att bli anropad.

Du kan anropa en UDF från din T-SQL-kod, precis som du skulle kalla en systemfunktion. Till exempel kan du använda en UDF i en WHERE sats för att begränsa resultaten av en SELECT påstående. Du kan också använda den i listan över kolumner för att återvända.

UDF:er kan också användas i beräknade kolumner. Detta kan vara praktiskt om du någonsin behöver en beräknad kolumn för att komma åt data i en annan kolumn.

Parametrar

En användardefinierad funktion kan acceptera upp till 1024 ingångsparametrar. Du kan dock även definiera en funktion utan några parametrar om det behövs.

Ett exempel på en inbyggd funktion utan några parametrar är GETDATE() . Denna funktion returnerar helt enkelt det aktuella databassystemets tidsstämpel. Du behöver inte skicka några parametrar för att få det.

Ett exempel på en användardefinierad funktion med en enda parameter kan vara en som returnerar en kunds kontaktinformation baserat på kundens ID. När du anropar funktionen skickar du kundens ID till funktionen som en parameter. Funktionen kan sedan slå upp kundens uppgifter och returnera dem i returvariabeln. Om du skickar in en annan kunds ID kommer funktionen att returnera uppgifterna för den kunden.

Fördelar med användardefinierade funktioner

Några av de främsta fördelarna med UDF:er inkluderar följande.

Modulär programmering
UDF:er låter dig skriva kod en gång och sedan anropa den så många gånger som behövs. Du behöver inte skriva om samma kod varje gång du behöver göra samma sak. Anropa helt enkelt funktionen istället. Detta är också fördelaktigt om något förändras. Du behöver bara uppdatera den på ett ställe – funktionen. Om du inte använde funktionen måste du uppdatera den på flera ställen i din applikation.
Prestanda
UDF:er minskar kompileringskostnaden för T-SQL-koden genom att cachelagra planerna och återanvända dem för upprepade körningar. UDF behöver inte analyseras och optimeras på nytt vid varje användning. Detta resulterar i mycket snabbare exekveringstider.
Minskad nätverkstrafik
En operation som filtrerar data baserat på en komplex begränsning som inte kan uttryckas i ett enda skalärt uttryck kan uttryckas som en funktion. Funktionen kan sedan anropas i WHERE klausul för att minska antalet rader som skickas till klienten.

UDF:er kan också ha andra, mer specifika fördelar, som i det tidigare exemplet som jag nämnde med den beräknade kolumnen som åtkomst till data i en annan tabell.

Typer av användardefinierade funktioner

Det finns två typer av T-SQL användardefinierade funktioner:

Skalära funktioner
Användardefinierade skalära funktioner returnerar ett enda datavärde. Du definierar värdets typ i funktionen. Returtypen kan vara vilken datatyp som helst utom text , ntext , bild , markör och tidsstämpel .
Tabellvärderade funktioner
Table-valued functions (TVF) returnerar en tabell. Deras returtyp är därför tabell . Det finns två typer av TVF:inline TVF och multi-statement TVF. En inline TVF har inte en funktionskropp. Dess returtabell är resultatet av en enda SELECT påstående. En TVF med flera påståenden har å andra sidan en funktionskropp. Med TVF:er med flera påståenden anger du tabellens struktur i returvariabeln.

Du kan också skapa skalära och tabellvärdade funktioner som användardefinierade funktioner för common language runtime (CLR).

Från och med SQL Server 2005 (9.x) kan du skriva användardefinierade funktioner i alla Microsoft .NET Framework-programmeringsspråk, som Microsoft Visual Basic .NET eller Microsoft Visual C#.


  1. Var finns PostgreSQL-loggarna på macOS?

  2. Använder row_to_json() med kapslade kopplingar

  3. Kontrollera om sekvensen finns i Postgres (plpgsql)

  4. Hur man får en lista över kolumner med unika begränsningar i SQL Server Database - SQL Server / TSQL Tutorial Del 98