Funcțiile din SQL Server sunt obiectele bazei de date care conține a set de instrucțiuni SQL pentru a efectua o anumită sarcină . O funcție acceptă parametrii de intrare, efectuează acțiuni și apoi returnează rezultatul. Ar trebui să remarcăm că funcțiile returnează întotdeauna fie o singură valoare, fie un tabel. Scopul principal al funcțiilor este de a replica cu ușurință sarcina comună. Putem construi funcții o singură dată și le putem folosi în mai multe locații, în funcție de nevoile noastre. SQL Server nu permite utilizarea funcțiilor pentru inserarea, ștergerea sau actualizarea înregistrărilor din tabelele bazei de date.
Următoarele sunt regulile pentru crearea funcțiilor SQL Server:
- O funcție trebuie să aibă un nume, iar numele nu poate începe cu un caracter special, cum ar fi @, $, # sau alte caractere similare.
- Instrucțiunile SELECT sunt singurele care operează cu funcții.
- Putem folosi o funcție oriunde, cum ar fi AVG, COUNT, SUM, MIN, DATE și alte funcții cu interogarea SELECT în SQL.
- Ori de câte ori o funcție este apelată, aceasta se compilează.
- Funcțiile trebuie să returneze o valoare sau un rezultat.
- Funcțiile folosesc numai parametrii de intrare.
- Nu putem folosi instrucțiunile TRY și CATCH în funcții.
Tipuri de funcții
SQL Server clasifică funcțiile în două tipuri:
- Funcțiile sistemului
- Funcții definite de utilizator
Să descriem ambele tipuri în detaliu.
Funcțiile sistemului
Funcțiile care sunt definite de sistem sunt cunoscute ca funcții de sistem. Cu alte cuvinte, toate funcții încorporate suportate de server sunt denumite funcții de sistem. Funcțiile încorporate ne economisesc timp în timpul îndeplinirii sarcinii specifice. Aceste tipuri de funcții funcționează de obicei cu instrucțiunea SQL SELECT pentru a calcula valori și a manipula datele.
Iată lista unor funcții de sistem utilizate în SQL Server:
- Funcții șir (LEN, SUBSTRING, REPLACE, CONCAT, TRIM)
- Funcții de dată și oră (datetime, datetime2, smalldatetime)
- Funcții agregate (COUNT, MAX, MIN, SUM, AVG)
- Funcții matematice (ABS, POWER, PI, EXP, LOG)
- Funcții de clasare (RANK, DENSE_RANK, ROW_NUMBER, NTILE)
Următoarea imagine arată toate funcțiile încorporate ale bazei de date utilizate în SQL Server:
Funcții definite de utilizator
Funcții care sunt creat de utilizator în baza de date de sistem sau o bază de date definită de utilizator sunt cunoscute ca funcții definite de utilizator. Funcțiile UDF acceptă parametri, efectuează acțiuni și returnează rezultatul. Aceste funcții ne ajută să ne simplificăm dezvoltarea prin încapsularea unei logici de afaceri complexe și făcându-le disponibile pentru reutilizare oriunde, în funcție de nevoi. Funcțiile definite de utilizator fac codul necesar pentru interogarea datelor mult mai ușor de scris. De asemenea, îmbunătățesc lizibilitatea și funcționalitatea interogărilor, precum și permit altor utilizatori să reproducă aceleași proceduri.
SQL Server clasifică funcțiile definite de utilizator în principal în două tipuri:
q1 q2 q3 q4
- Funcții scalare
- Funcții cu valori în tabel
Iată descrierile acestor funcții UDF.
Funcții scalare
Funcția scalară în SQL Server întotdeauna acceptă parametri, fie unici, fie multipli și returnează o singură valoare . Funcțiile scalare sunt utile în simplificarea codului nostru. Să presupunem că am putea avea un calcul complex care apare într-un număr de interogări. Într-un astfel de caz, putem construi o funcție scalară care încapsulează formula și o folosește în fiecare interogare în loc de în fiecare interogare.
Următoarele sunt sintaxa care ilustrează crearea funcției scalare în SQL Server:
CREATE FUNCTION schema_name.function_name (parameter_list) RETURNS data_type AS BEGIN statements RETURN value END
Parametrii de sintaxă de mai sus sunt descriși mai jos:
Vom defini mai întâi numele funcției după CREATE FUNCȚIA Cuvinte cheie. Numele schemei este opțional. Dacă nu vom defini numele schemei, SQL Server utilizează schema implicită dbo . În continuare, vom defini lista de parametrii incluse în paranteză. În al treilea rând, vom scrie instrucțiunile pentru funcție și apoi, în SE INTOARCE declarație, definiți tipul de date al valorii returnate. În cele din urmă, am adăugat instrucțiunea RETURN pentru a returna o valoare în corpul funcției.
Exemplu
Acest exemplu va crea o funcție pentru calculați vânzările nete pe baza cantității, prețului și reducerii:
CREATE FUNCTION udfNet_Sales( @quantity INT, @price DEC(10,2), @discount DEC(3,2) ) RETURNS DEC(10,2) AS BEGIN RETURN @quantity * @price * (1 - @discount); END;
Acum, putem folosi această funcție pentru a calcula vânzările nete ale oricărei comenzi de vânzare din tabelul definit.
Următoarea imagine afișează unde putem găsi funcțiile scalare:
Putem numi funcțiile scalare la fel ca și funcția încorporată în SQL Server. De exemplu, putem apela funcția udfNet_Sales de mai sus după cum urmează:
SELECT dbo.udfNet_Sales(25, 500, 0.2) AS net_sales;
Executarea acestei funcții va returna vânzările nete:
Ne permite și SQL Server pentru a modifica funcția scalară utilizând ALTER cuvânt cheie. Iată sintaxa pentru a face acest lucru:
ALTER FUNCTION schema_name.function_name (parameter_list) RETURNS data_type AS BEGIN statements RETURN value END
Putem folosi instrucțiunea de mai jos pentru a elimina funcția scalară din baza de date SQL Server:
DROP FUNCTION [schema_name.]function_name;
Funcții cu valori în tabel
Funcțiile cu valori de tabel din SQL Server sunt funcţie definită de utilizator care returnează date de tip tabel. Din moment ce această funcție este tipul returnat este un tabel , îl putem folosi în același mod în care folosim un tabel.
Putem clasifica funcția cu valori de tabel în două tipuri:
1. Funcții Tabel-Valori inline
Această funcție UDF returnează o variabilă de tabel pe baza acțiunii efectuate de funcție. O singură instrucțiune SELECT trebuie utilizată pentru a determina valoarea variabilei de tabel.
Exemplu
Exemplul de mai jos va crea o funcție de valori de tabel și va prelua datele din tabelul angajaților:
--It creates a table-valued function to get employees CREATE FUNCTION fudf_GetEmployee() RETURNS TABLE AS RETURN (SELECT * FROM Employee)
În această sintaxă, TABEL DE RETUR specifică că funcția va returna un tabel. Din moment ce nu există ÎNCEPE... Sfârșit declarație, pur și simplu interogează datele din tabelul angajaților. De asemenea, dacă nu are niciun parametru, va fi apelat direct.
Putem apela funcțiile cu valori de tabel utilizând DIN clauza din SELECTAȚI interogare. De exemplu , putem numi cele de mai sus udf_GetEmployee functioneaza ca mai jos:
site-uri precum bedpage
SELECT * FROM udf_GetEmployee();
Executarea acestei funcții va returna rezultatul de mai jos:
SQL Server ne permite, de asemenea, să modificăm funcțiile cu valori de tabel folosind cuvântul cheie ALTER în loc de cuvântul cheie CREATE. Restul scenariului este același.
Funcții cu valori de tabel cu mai multe instrucțiuni (MSTVF)
Această funcție UDF returnează o variabilă de tabel pe baza acţiunii efectuate de funcţie. Poate conține instrucțiuni simple sau multiple pentru a produce rezultatul și este, de asemenea, o funcție care returnează rezultatul mai multor instrucțiuni într-o formă tabelară. Este util deoarece putem executa mai multe instrucțiuni în această funcție și obținem rezultate agregate în tabelul returnat. Putem defini această funcție utilizând o variabilă de tabel ca valoare de returnare. În interiorul funcției, executăm mai multe interogări și inserăm date în această variabilă de tabel.
Următorul exemplu creează un nume de funcție „MULTIVALUAT” care returnează ' @Angajat' masa. Conține trei câmpuri numite id, emp_name și salariu din 'Angajat' tabel folosind instrucțiunea INSERT și apoi utilizează instrucțiunea UPDATE pentru a actualiza numele angajatului.
CREATE FUNCTION MULTIVALUED() RETURNS @Employee TABLE (id INT, emp_name VARCHAR(50), salary INT) AS BEGIN INSERT INTO @Employee SELECT E.id, E.emp_name, E.salary FROM Employee E; UPDATE @Employee SET emp_name = 'Graeme Smith' WHERE id = 3; RETURN END
Putem apela funcțiile cu mai multe instrucțiuni cu valori de tabel utilizând clauza FROM a interogării SELECT. De exemplu , putem apela funcția de mai sus după cum urmează:
SELECT * FROM MULTIVALUED();
Executarea acestei funcții va returna rezultatul de mai jos:
Când ar trebui utilizate funcțiile cu valori de tabel?
Funcțiile cu valori de tabel sunt utilizate în mod obișnuit ca vederi parametrizate. Funcțiile cu valori de tabel sunt mai flexibile decât procedurile stocate, deoarece pot fi utilizate oriunde sunt utilizate tabelele.
Concluzie
Acest articol va explica o prezentare completă a funcțiilor utilizate în SQL Server. Aici am învățat în principal două tipuri de funcții utilizate în SQL Server: funcții de sistem și definite de utilizator.