Documente Academic
Documente Profesional
Documente Cultură
Lab Book SQL Server 2017
Lab Book SQL Server 2017
Lab Book SQL Server 2017
V31 O~ e11e11A
CU PRINS
A A
.
8. ADMINISTRAREA VIZIUNILOR SI A EXPRESIILOR-TABEL ..................... 157
8.1. TABELE TEMPORARE .................................................................................................... 157
8.2. VIZIUNl ......................................................................................................................... 158
8. 2.1. Tipuri de viziuni ......................................................................................................... 158
8.2.2. Avantaje oferite de viziuni ......................................................................................... 158
8.2.3. Restric/ii de utilizare .................................................................................................. 159
8.3. ADMINISTRAREA VIZIUNILORIN SQL SERVER MANAGEMENT STUDIO ....................... 159
8.3.1. Crearea viziunilor cu View Designer .................. ,..................................................... 159
8.3.2. Salvarea viziunilor ..................................................................................................... 162
8.3.3. Excluderea unei coloane din setul de rezultate al viziunii ........................................ 163
8.3.4. Modificarea ordinii de prezentare a cdmpurilor ....................................................... 163
8. 3. 5. Crearea criteriilor fn viziuni...................................................................................... 163
8. 3. 6. Acordarea permiselor ................................................................................................ 164
8.3. 7. Ob/inerea informa/iilor despre proprietiifile (dependen/ele) viziunilor.................... 165
8. 3. 8. Vizualizarea date/or din viziuni ................................................................................. 167
8.4. GESTIUNEA VIZIUNILOR, UTILIZAND EDTTORUL DE INTEROGARI .................................. 167
8. 4.1. Sintaxa generalii a instrucfiunii de creare a viziunilor ............................................. 168
8.4.2. Crearea viziunilor ...................................................................................................... 169
8.4.3. Opera/ii DML asupra viziunilor ................................................................................ 172
8. 4. 4. Modificarea ~i suprimarea viziunilor ........................................................................ 173
8.5. EXPRESIE-TABEL .......................................................................................................... 174
8. 5.1. Caracteristici de bazii ale CTE. ................................................................................. 174
8.5.2. Interogiiri CTE nerecursive ....................................................................................... 175
8.5.3. Expresii-tabel cufuncfii analitice .............................................................................. 176
8. 5. 4. Interogiirile recursive folosind expresii-tabel ........................................................... 178
8. 5. 5. 0 expresie-tabel recursivii pentru calculul factorialului unui numiir ....................... 179
8. 5. 6. 0 expresie-tabel recursivii pentru parcurgerea unei ierarhii ................................... 180
9. PROCEDURI STOCATE SI FUNCTII DEFINITE DE UTILIZATOR ............. 183
9 .1. NOTJUNI DE ELABORARE A PROCEDURILOR STOCA TE ................................................... 183
9.1.1. Ce sunt procedurile stocate? ..................................................................................... 183
9.1. 2. Clasificarea procedurilor stocate .............................................................................. 183
9.1.3. Reguli de creare a procedurilor stocate .................................................................... 184
9.1. 4. Structura procedurilor stocate .... ............................................................................... 184
9.2. CREAREA PROCEDURILOR STOCATE ............................................................................. 185
9. 2.1. Crearea procedurilor stocate fn Transact-SQL Query Editor .................................. 185
9.2.2. Crearea procedurilor stocate din arborele de obiecte .............................................. 186
9 .3. EXECUTAREA PROCEDURILOR STOCA TE ....................................................................... 187
9. 3.1. Executarea procedurilor stocate fn Transact-SQL Query Editor ............................. 187
9. 3. 2. Executarea procedurilor stocate in SQL Server Management Studio ....................... 189
9.4. MODIFICAREA PROCEDURILOR STOCATE .. .. .. .. ...... .... .. .......... .. .............................. .. ...... 191
9.5. FUNC'fII DEFINITE DE UTILIZATOR ........................ .. .... .... ...... .................. .. .......... .......... 191
9. 5.1. Funcfii de tip scalar ......................... .... ...... ........ ........... ..................................... ........ 192
9.5.2. Funcfii de tip tabel simplu ........ ..... ... ....... ................ ....... ..... ........... .... ........................ 194
9.5.3. Funcfii de tip tabel multi-instrucfiune .. ...... .. ... .. ..... .. ........ ......... .. ...... ............ ... ..... :.... 195
9. 5.4. Modificarea ~i suprimarea funcfiilor definite de utilizator ........... ............................. 197
9.6. FUNCTIILE DEFINITE DE UTILIZATOR VS PROCEDURI STOCATE .. ...... .... .. .. .. ...... .... ........ 198
10. CREAREA SI UTILIZAREA DECLANSATOARELOR ................................... 201
10.1. CLASIFICAREA TIPOLOGICA ~I STRUCTURA DECLAN~ATOARELOR .... .. .. ........ .... ...... ... 201
10.1.1. Declan~atoare DML .... .. ..... ..... ... .... .... ....... ..... ........ ... .... ...... .. .. .. ............................... 201
10.1.2. Declan~atoare DDL ..... ... ... ....... ....... ......... ..... .... ................. .. .... ........... .................... 202
10.1. 3. Declan~atoare Logon ..... .... .. .......... .......... .. ...... ... .. .. ..... .... ....... ... ...... .... .. ........ .... .... .. 203
10.1.4. Structura declan~atoarelor..... ..... ... ..... ......... ....... .. ... ...... ....... ................................... 203
10.2. CREAREA, ACTIVAREA ~IDEZACTIVAREADECLAN~ATOARELOR ...... ........................ . 207
10.2.1. Crearea declan~atoarelor DML .... .................... ...... ....:····· ···· ··· ····· ·· ········· ·· ······ ······· ·207
10. 2. 2. Crearea declan~atoarelor DDL ........ ............ .... .. ... ........ ............................ .............. 209
10.2.3. Crearea declan~atoarelor LOGON. ..... .... .. ............ ...... ... .. .. ........ .......................... ... 209
10. 2. 4. Activarea ~i dezactivarea declan~atoarelor .... ..... .. .................................................. 210
10.3. DECLAN~ATOARELE ~I PROCEDURILE STOCATE STANDARD .... ...... ...... ....................... 211
11. RECUPERAREA BAZEi DE DATE ..................................................................... 213
11.1. MODELE DE RECUPERARE ~I TIPURI DE BACKUPURI .. .... .. .. .. .. .................... ...... .. .. .. .. ... 213
11.1.1. Modele de recuperare ....... ........ .... ..... ...... .... ..... ... .... ...... .......... ...... .. .. ....... ........ .... ... 213
11.1.2. Backupuri complete ale bazei de haze .... .............. ....... ...... ..... ... ... .. ... ..... ............ ..... 214
11.1.3. Backupuri diferenfiale .. ..... ... .. ...... ....... .... ... .. ...... ... ............ ....................................... 214
11.1.4. Backupuri ale bazei de date ... .... .. ........ ... .... .. .... ... .. .... .. .. ..... ..... .. .... .... ..... ... .............. 214
11.1. 5. Backupuri parfiale ......... ....... ... .... .... ..... .. ...... .............. .... .... ... ...... ..... ....... ........ ... ...... 215
11.1. 6. Backupuri de fi~iere ............ ..... .. ... .... ... .... .............. ..... .. .. .......... .... .. .. .. .. ............... ..... 215
11.1. 7. Backupuri alejurnalului de tranzacfii (modelele complete ~i Bulk-Logged) .... ... .. . 215
11.1.8. Backupuri copy-only .... .... ... .... ..... ..... ... .... .... .. ... ............ ....... .. ..... .... .......................... 216
11.2. RESTRICTII ASUPRA OPERATIILOR DE RECUPERARE .... ...... .. .................. .............. ........ 216
11.2.1. Nu potfi create copii ale date/or deconectate (offiine) .. ..................................... ..... 216
11.2. 2. Restricfii asupra accesului concurenfial in timpul creiirii copiei de rezervii ..... ... .. 216
11.3. CREAREA COPIILORDE REZERVA .. .......... .. .... .. .......... .. .. .. ........ .. .... .. .... .......... ...... ........ 217
11.3.1. Dispozitive backup .......... ........... ...... ......... .... ..... ....... .... ... ........... ... ...... .... ........ ... .... . 2 ! 7
11.3. 2. Realizarea unui backup comp/et al bazei de date ... ......... ............................ .. .......... 219
11.3.3. Vizualizarea copiei de rezervii ..... .. .. ..... ... .. .. ........... .. ....... ..... ..... .. ...... .... ... ...... ... .... .. 220
11. 3.4. Crearea backupului in Transact-SQL Query Editor ......................... .... ........ .. ......... 222
11.4. RESTAURAREA BACKUPULUI ...................................................................................... 223
11.4.1. Recuperarea date/or in mediul SQL Server Management Studio ....... .......... ... ....... . 223
11.4.2. Recuperarea date/or, folosind instrucfiuni Transact-SQL. ....... ... ...... .... .... .. .. ... .. .. ... 224
12. SERVICII DE INTEGRARE A DATELOR ......................................................... 227
12.1. COMPONENTELE ~I FUNCTJONALITATILE SSIS .................. .. .......... .. .. .. .................. .. .. . 227
12.2. INSTALARE SQL SERVER DATA TOOLS .. .. .. .. ...... .. ...... .... ........ .. ........................ .. ....... 228
12.3. GESTIUNEA DATELOR, APLICAND SSIS PACKAGE DESIGNER ...................... .... ........... 229
12.3.1. Crearea pachetelor SSIS. ......................................................................................... 229
12.3.2. Executarea ~i Depanareapachete/or SSIS .............................................................. 237
12.4. EXPORTAREA DATELOR CU AJUTORUL ASISTENTULUI ................................................ 238
12.5. DESFA~URAREA ~I GESTIUNEA PACHETELOR SSIS ..................................................... 245
12.5.1. Crearea Integration Services Catalog ..................................................................... 246
12.5.2. Desfa~urarea pachetelor in Integration Services Catalog ...................................... 246
12.5.3. Executarea unui pachet din SSISDB ........................................................................ 248
13. SERVICII DE CREARE A RAPOARTELOR ..................................................... 253
13.1. INSTALAREA SERVICIULUI SSRS ................................................................................ 253
13.2. CONFIGURAREA SERVICIULUI SSRS ........................................................................... 254
13.3. GESTIUNEA RAPOARTELOR CU AJUTORUL VISUAL STUDIO ........................................ 257
13.3.1. Crearea rapoartelor in mediul Visual Studio .......................................................... 257
13.3.2. Previzualizarea rapoartelor .................................................................................... 261
13. 3. 3. Configurarea proprietafilor de desfa~urare ............................................................ 262
13.3.4. Publicarea ~i vizualizarea rapoarte/or .................................................................... 263
13.4. EDITAREAPROPRIETATILOR UNUIRAPORTDEJA EXIS'J:ENT ........................................ 265
14. SERVICII DE ANALIZA DIMENSIONALA A DATELOR ............................. 267
14.1. INTRODUCERE IN OLAP ............................................................................................. 267
14.1.1. Un exemplu de cub ................................................................................................... 267
14.1.2. "Taierea" cubului.................................................................................................... 268
14.1. 3. Metode de construire a cuburilor .... ........................................................................ 268
14.2. CREAREA UNUI PROIECT ANALYSIS SERVICES ........................................................... 269
14.3. CREAREA UNUI CUB FOLOSIND ASISTENTUL, DAR FARA SURSA DE DATE ................... 270
14.3.1. Construirea unui Cub nou ....................................................................................... 270
14.3.2. Specificarea metodei de construire .......................................................................... 270
14.3.3. Adiiugarea masurilor ............................................................................................... 271
14.3.4. Adaugarea dimensiunilor ........................................................................................ 272
14.3.5. Definirea perioadelor de timp ................................................................................. 272
14. 3. 6. Adaugarea calendarului special.. ............................................................................ 2 73
14.3. 7. Stabilirea legiiturilor dintre dimensiuni ~i miisuri .................................................. 274
14.3.8. Finalizarea utilizarii asistentului Cube Wizard ...................................................... 275
14.4. REVIZUALIZAREA STRUCTURII CUBULUI IN CUBE DESIGNER ..................................... 276
14.5. CREAREA TABELELOR-DIMENSIUNI ~I TABELELOR-FAPTE .......................................... 278
14.5.1. Generarea unei Schemefolosind asistentul Schema Generation Wizard. ............... 278
14. 5. 2. lncarcarea date/or in schema relafionala ............................................................... 2 83
14. 5. 3. Procesarea dimensiunilor vs procesarea cuburilor ........................... ..................... 284
14. 5. 4. Desfa~urarea ~i procesarea Cubului ... .................................................................... 285
14.6. INTEROGAREA CUBULUI, FOLOSIND LIMBAJUL MULTIDIMENSIONAL EXPRESSIONS ... 286
14.6.1. Limbajul Multidimensional Expressions ................................................................. 286
14.6.2. Executarea interogiiri/or MDX ............................................................................... 286
14. 6. 3. Explorarea dimensiunilor ~i miisurilor..... ............................................................... 288
BIBLIOGRAFIE ............................................................................................................ 291
Cuvfint inainte
Cuvant inainte
SQL Server este un sistem de gestiune a bazelor de date (SGBD), creat de Microsoft. Prima
versiune a fost lansata in 1987. Principalul limbaj de programare folosit de acest sistem este SQL
(Structured Query Language) - limbaj structurat de interogari.
Microsoft SQL Sever folose~te o varianta de SQL, numita T-SQL, sau Transact-SQL, o
implementare de SQL-92 (standardul ISO pentru SQL). Transact-SQL reprezinta o extensie a limbajului
SQL creata de catre Microsoft ~i Sybase. Transact-SQL in principal adauga sintaxa aditionala pentru
procedurile stocate ~i pentru tranzactii.
Codul de baza pentru Microsoft SQL Server i~i are originile in Sybase SQL Server ~i a reprezentat
intrarea Microsoftului pe piata bazelor de date pentru intreprinderi, concurand cu Oracle, IBM ~i Sybase.
Microsoft, Sybase ~i Ashton-Tate s-au unit pentru a crea ~i a scoate pe piata prima versiune numita SQL
Server 4.2 pentru Win OS/2. Mai tarziu, Microsoft a negociat pentru drepturi de exclusivitate la toate
versiunile de SQL Server scrise pentru sistemele de operare Microsoft. Sybase ~i-a schimbat, ulterior,
numele In Adaptive Server Enterprise, pentru a evita confuzia cu Microsoft SQL Server.
SQL Server 7.0 a fost primul server de baze de date bazat pe GUI: 0 varianta de SQL Server 2000 a
fost prima varianta comerciala pentru arhitectura Intel. SQL Server 2000 ~i-a dorit a fi un concurent direct
pentru aplicatiile Oracle, iar pentru acest fapt i s-a adaugat suport 100% pentru limbajul XML prin
intermediul caruia se poate interoga direct serverul dintr-un browser (daca serverul a fost configurat sa
suporte aceasta facilitate).
SQL Server 2005 a fost o solutie flexibila ~i adaptiva la diversele categorii de clienti, raspunzand la
o serie de nevoi precum nivel ridicat de scalabilitate, performanta ~i siguranta in exploatare. Versiunea
2005 a avut un succes foarte mare pe piata IT ~i s-a observat, de asemenea, ca interesul catre SGBD-ul
companiei Microsoft creste.
SQL Server 2008, cunoscut ~i sub numele de cod ,,Katmai'', a aparut in al doilea trimestru al anului
2008, sub forma de soft-test, insa cu valabilitate generala a aparut in trimestrul al treilea, la exact trei ani
de la lansarea produsului SQL Server 2005, care, la randul sau, a suferit foarte multe amanari la lansare.
in cadrul evenimentului Pass Summit 2011 , a fost oficial prezentata versiunea SQL Server 2012.
Sistemul SQL Server 2012 duce mai departe succesul inregistrat de versiunea SQL Server 2008 ~i
impresioneaza clientii cu noi caracteristici aflate in stransa legatura cu trendurile moderne IT. Acest sistem
contine o serie de idei ~i concepte noi, care ulterior au stat la temelia formarii unei versiuni mai avansate -
SQL Server 2014 lansate 1 aprilie.
in prezent, datele provin atat din surse relationale, cat ~i din cele non-relationale, din medii on
premise, precum ~i din cloud, din Big Data, cat ~i din alte surse. in acest context, rolul Microsoft SQL
Server este de a-i ajuta pe utilizatori sa acceseze, integreze ~i sa stocheze aceste date, dar ~i sa le
gestioneze sau sa extraga rapoarte detaliate.
Tinand cont de aceasta, se poate afirma ca SQL Server a devenit eel mai popular sistem de gestiune
a bazelor de date. Acest SGBD devine foarte potrivit pentru o varietate de proiecte: de la aplicatii mici la
proiecte mari de incarcare inalta.
Astfel, versiunea 16 a fost lansata la 1 iunie 2016. Este cunoscut faptul ca SQL Server a fost mult
timp un sistem exclusiv de gestionare a bazelor de date pentru Windows, dar, de la versiunea 16, acest
sistem este disponibil ~i pe Linux.
SQL Server 2016 [49] reprezinta un progres important in istoria platformelor de date Microsoft,
aducand analiza operationala in timp real, vizualizari inteligente, inclusiv pe dispozitive mobile,
capabilitati de analiza avansata a datelor, noi tehnologii de securitate ~i posibilitatea integrarii cloud-ului
hibrid - arhitecturi de date ce pot distribui procesarea datelor concomitent on premise ~i pe sisteme aflate
in cloud - pentru costuri mai mici ~i o agilitate crescuta.
Cuviint inainte
in afara de aceasta, ultima versiune a suportat imbunatatiri ~i optimizari profunde ce tin de lucrul
intern al optimizatorului, instrumentele BI ~i de administrare.
Sistemul MS SQL Server a devenit tot mai convergent, ca, in final, in octombrie 2017, Microsoft sa
lanseze oficial versiunea SQL Server 2017 (nume de cod vNext). Versiunea noua reprezinta un pas
important spre transformarea SQL Server intr-o platforma care ofera posibilitati de alegere a limbajelor de
dezvoltare, tipurilor de date, locale sau cloud, ~i a sistemelor de operare. in continuare, sunt remarcate
cateva optiuni noi aparute in 2017 [58].
1. Serverul SQL se executa pe Windows, Linux ~i containere cu Docker
Cu versiunea 2017, Microsoft a extins sistemele de operare acceptate de SQL Server. Sistemul SQL
Server 2017 poate fi acum instalat pe:
• Windows
• Red Hat Enterprise Linux 7.3
• SUSE Enterprise Linux Server v12 SP2
• Ubuntu 16.04LTS
• Docker Engine 1.8+
De acest lucru pot fi interesati cei care, deja, au in gestiunea !or una sau mai multe dintre aceste
sisteme de operare sau care cauta sa se mute pe una din aceste platforme non-windows.
in lucrarea data, se analizeaza lucrul cu sistemul SQL Server doar in mediul Windows, fiind mai
accesibil utilizatorului care abia incepe studiul in domeniu [17].
2. Crearea bazelor de date de tip graf
Posibilitatile bazei de date de tip graf a fost inclusa in SQL Server 2017. Obiectele-graf sunt
construite pentru a reprezenta legaturi complexe. 0 baza de date graf este o structura care permite sa
stocheze noduri ~i muchii, unde nodurile sunt entitati, cum ar fi un Angajat sau un Departament, iar
muchiile reprezinta relatiile dintre noduri. De exemplu, "un Angajat lucreaza intr-un Departament".
Un caz particular al unui graf ii constituie un arbore (in care nodurile pot avea orice grad) sau o
forma ierarhica de reprezentare a datelor. Astfel, baza de date graf permite mai u~or sa construiasca
legaturile unu la multe sau multe la multe internoduri. Avand functionalitatile bazei de date graf in SQL
Server 2017, acum devin mai facile stocarea ~i interogarea legaturilor complexe intre nodurile ~i muchiile
entitatilor.
3. Suportul scripturilor scrise in limbajul Python
in versiunea 16, sistemul SQL Server era integrat cu limbajul R. Microsoft a decis sa mearga mai
departe: acum, SQL Server 2017, devine integrat cu limbajul Python, fapt care poate fi utilizat pentru
anali~ti, creand in baza de date aplicatii inteligente. Cu alte cuvinte, aplicatia utilizatorului poate apela, pur
~i simplu, la proceduri stocate pe serverul SQL, in care va fi executat codul R sau Python, analizand datele
din baza de date tara a fi transmise aplicatiilor respective.
Odata cu introducerea versiunii 2017, un cercetator poate acum sa efectueze mai u~or invatarea
automata direct in interiorul sistemului SQL Server. Avand limbajului Python integrat in motorul bazei de
date, SQL Server are avantajul efectuarii proceselor Python tara sa fie nevoie de mutarea datelor in afara
sistemului.
Aplicatiile Python, acum, se integreaza mai simplu cu sistemul SQL Server. Este suficienta apelarea
codului extern Python prin procedura stocata sp_execute_external_script. Aceasta procedura stocata a fost
introdusa, pentru prima data, in sistemul SQL Server 2016, pentru a sustine procesarea limbajului R, dar
acum a fost extinsa in SQL Server 2017 ~i pentru Python.
Pentru un control mai bun ~i mai echilibrat al resurselor motorului SQL, volumul resurselor
dedicate proceselor Python poate ft gestionat prin Resource Governor. in plus, sunt create unele jumale
(logs) ~i vederi (views), care permit Administratorului Bazei de Date (DBA) sa vada exact ce resurse sunt
consumate de Python.
Cuvlint inainte
Planul de executie a unei interogari s-ar putea schimba in ti.mp odata cu modificarea datelor
asociate. Aceste modificari pot duce la estimari incorecte cantitative ~Vsau calitative, determinand
selectarea unui plan de executie neoptimal.
Prelucrarea adaptiva a interogarilor, in SQL Server 2017, poate imbunatati timpul de executie a
interogarilor similare. Astfel, m baza de date, poate fi specificat faptul ca este utilizata procesarea adaptiva
a interogarilor prin executarea unei instructiuni ALTER DATABASE.
Astfel, exista trei tipuri diferite de optimizari ale interogarilor, pe care procesul adaptiv de
prelucrare a interogarilor le va lua in considerare: alocari de memorie, jonctiuni de memorie ~i executari
de intercalare. Prin ajustarea valorii de memorie, acordate in ti.mp, procesarea adaptiva a interogarilor
po ate reduce cantitatea de memorie transferata pe disc [40] ~i poate imbunatati substantial performanta
interogarii. Procesarea adaptiva a interogarilor ajusteaza planul de executie pentru a utiliza fie jonctiunea
hash, fie o jonctiune nested-loop, bazata pe numarul de tupluri ~i o limita de prag.
8. Extinderea Serviciilor de lntegrare
Odata cu SQL Server 2017, Microsoft a implementat o optiune noua de extindere a serviciilor de
integrare SSIS, numita "Scale Out SSIS". Scale Out permite distribuirea executarii unui pachet pe mai
multe m~ini. Este evident ca executarea pachetului, in paralel, pe una sau mai multe m~ini, poate
imbunatati performanta generala a pachetului SSIS. in mediul Serviciului Scale Out, SSIS poate fi
executat On-Premise, precum ~i pe m~ini virtuale Azure.
Pentru executarea unui pachet in paralel, trebuie sa fie configurata functia "Scale out". Atunci cand
se configureaza functia "Scale out", se instaleaza un serviciu Scale Out Master ~i unu sau mai multe
servicii Scale Out Worker. Serviciul Scale Out Master gestioneaza comunicarea cu serviciile Scale Out
Worker asigurand coordonarea executiei paralele pentru un pachet SSIS. Serviciile Scale Out Worker
mdeplinesc sarcinile curente de executare a pachetelor.
9. Alte facilitap
in afara de caracteristicile mentionate, m comparatie cu ultima versiune, au aparut urmatoarele:
• Ameliorari in serviciile de analiza SQL Server (SSAS): nivelul de compatibilitate pentru o serie
larga de modele tabulare; ofera o interfata modema de obtinere a datelor; ofera codificarea
sugestiva a datelor; asigura utilizarea ierarhiilor neomogene etc.
• lmbunatatirea serviciilor de rapoarte SQL Server Reporting Services (SSRS) - in rapoarte, deja,
sunt accesibile comentarii, care permit comunicarea, asupra punctului de vedere, cu alti
utilizatori. Cu alte cuvinte, utilizatorul poate participa la discutii.
• Sustinerea suportului SSIS pentru Windows cu o arhitectura de inalta disponibilitate (hight
availability).
• Au aparut cateva functii noi de prelucrare a ~irurilor de caractere. in afara de aceasta, a fost
introdusa ~i o functie de agregare speciala (STRING AGG) pentru sustinerea WITHIN GROUP.
10. Destinape
Volumul de fata a fost predat in sali de catre traineri cu vasta experienta atat pe parte teoretica, cat
~i practica. Acest manual este dedicat, in special, persoanelor care doresc sa se initieze in domeniul
bazelor de date, angajatilor companiilor de software sau potentialilor angajati. in afara de aceasta, scopul
acestui volum este de a oferi cititorilor sa treaca treptat de la versiunile anterioare de SQL Server la noile
caracteristici din SQL Server 2017.
Autorii
Instalarea # conflgurarea SQL Server
Un alt mecanism foarte important al sistemelor cu arhitectura client-server este eel de asigurare a
securitatii, prin sistemele de evidenta a utilizatorilor ~i parolelor.
Pe piatii, exista mai multe SGBD-uri obiect-relationale care sustin arhitectura client-server. Intre
ele, se 'inscriu Microsoft SQL Server, Oracle, PostgreSQL, MySQL, Sybase, Interbase etc.
1.1.2. Faci/itati
, noi oferite de SQL Server 2017
SQL Server a evoluat rapid de la un SGBD desktop mic la un sistem convergent orientat pe o
performanta ~i scalabilitate inalta. Deja, se cuno~te faptul ca sistemul SQL Server este un SGBD de tip
client-server, iar odata cu aparitia versiunii noi a acestui sistem au aparut ~i posibilitati noi de creare ~i
gestiune a bazelor de date.
Microsoft SQL Server 201 7, cea mai recenta platforma de management de date, aplicatii ~i
infrastructura de la Microsoft, reprezinta noul trend in materie de Cloud OS ~i deserve~te centrele de date
ale clientilor, cele ale furnizorilor de hosting ~i cloudul public de la Microsoft. Printre beneficiile unei
platforme convergente se numara accesul u~or ~i de oriunde la date, management, identificare ~i
virtual izare.
SQL Server 2017 le ofera organizatiilor posibilitatea de a-~i scala, proteja ~i accesa datele de pe
desktop sau dispozitive mobile ~i dintr-un centru de date sau din cloud (public, privat sau hibrid). SQL
Server asigura performanta mission-critical pentru cele mai solicitante aplicatii de baze de date ~i livreaza
in acel~i timp cele mai performante solutii de securitate, scalabilitate, accesibilitate ~i suport.
Microsoft SQL Server 201 7 permite dezvoltarea de solutii unice de cloud hibrid bazate pe Cloud
OS. Aceste solutii au un impact pozitiv asupra rezultatelor unei companii ~i contribuie la dezvoltarea de
solutii inovatoare pentru aplicatiile de baze de date.
Microsoft SQL Server 2017 este disponibil in urmatoarele editii [24]:
• SQL Server 2017 Enterprise Edition
• SQL Server 2017 Standard Edition
• SQL Server 2017 Web Edition
lnstalarea ~i configurarea SQL Server
Databases
Denumirea de baza de date denota faptul ca aceasta componenta contine obiecte responsabile de
reprezentarea datelor intr-o forma generala, precum ~i accesul la acestea.
Tables
Tabelele, probabil, constituie partea principala a bazelor de date. inregistrarile sunt stocate sub
forma de tabel (la nivel logic) constituit din linii ~i coloane. Linia este formata dintr-o secventa de
date, iar datele sunt reprezentate de coloane. Adica, fiec!ife coloana este responsabila de pastrarea
unui anumit tip de date, pe care le grupeaza dupa asemanare. Multimea de date dintr-o linie
formeaza o inregistrare.
Database Diagrams
Diagramele bazei de date constituie o reprezentare grafica a tabelelor, indec~ilor ~i altor proprietati.
Ele faciliteaza indeplinirea unor sarcini, aplicand comenzi ale limbajului Transact-SQL. De
exemplu, este mult mai u~oara executarea legaturii intre doua tabele, utilizand trasarea acesteia de la
un punct la altul decat specificarea acestei legaturi prin instructiuni Transact-SQL.
Indexes
in bazele de date, indeqii sunt structuri aditionale folosite pentru accelerarea accesului la date. intr-
o baza de date, un index permite SGBD-ului sa gaseasca, intr-un tabel, datele necesare, tara a scana
intregul tabel. Un index lntr-o baza de date este o lista de valori cu locatiile de stocare a liniilor lntr-
un tabel spre care indica fiecare valoare din lista. Indec~ii pot fi creati atat pe o singura coloana, cat
~i pe o multime de coloane dintr-un tabel ~i pot fi implementati sub forma de B-arbori.
Views
0 viziune (sau vedere) nu este altceva decat un tabel virtual, rezultatul unei consultari. Datele
accesibile direct lntr-o viziune nu sunt stocate In baza de date ca un obiect distinct. Ceea ce este
stocat in baza de date este doar instructiunea SELECT. Setul de linii extrase de instructiunea
SELECT formeaza acest tabel virtual, adica viziunea. Un utilizator poate folosi viziunea, indicand in
instructiunile Transact-SQL numele viziunii in acel~i mod in care se folose~te numele unui tabel.
Schemes
Schema reprezinta un container de obiecte din baza de date unite printr-un nume (Namespace).
Acest container se utilizeaza pentru denumirea obiectelor ~i gruparii lor logice ~i pentru alocarea ~i
controlul accesului asupra acestor obiecte. La crearea unui nou utilizator, schema implicita a lui este
dbo. E posibila specificarea unei scheme inexistente. Nu se permite specificarea unei scheme
implicite pentru utilizator, care este, deja, asociata cu un grup Windows, cu un certificat sau o cheie
asimetrica.
Synonyms
Un sinonim reprezinta un nume altemativ dat unui obiect al schemei bazei de date. Aplicatiile-client
pot utiliza pentru referinta la obiect numai o parte a numelui, daca aceasta parte a numelui
reprezinta un sinonim al unui nume real, mai complex, dat obiectului. Acest instrument asigura un
nivel de abstractie care protejeaza aplicatia clientului de schimbarile ce pot surveni in numele sau
locatia obiectelor bazei de date. Un sinonim apartine schemei ~i, ca orice alt obiect al bazei de date,
trebuie sa aiba un nume unic.
Instalarea # conflgurarea SQL Server
Stored Procedures
0 procedurii stocatii (Stored Procedure) reprezintii un grup de instructiuni Transact-SQL compilate
intr-un singur plan de executie. Procedurile stocate SQL Server returneazii date de patru tipuri:
• Parametri de ie~ire, care returneazii fie date (intregi sau secvente de caractere), fie variabile-
cursor.
• Coduri de retumare, care sunt !ntotdeauna valori intregi.
• Un set de rezultate pentru fiecare instructiune SELECT din procedura stocatii sau din alte
proceduri stocate apelate de procedura data
• Un cursor global care poate fi indicat din exteriorul procedurii stocate.
Triggers
Declan~atoarele (Triggers) formeazii o categorie specialii de proceduri stocate, care se executii
automat atunci cand o instructiune DML sau DDL este executatii asupra tabelelor sau (in cazul
declan~atoarelor DDL) chiar ~i asupra serverului intreg. Declan~atoarele pot extinde logica de
verificare a constrangerilor de integritate a bazei de date, valorilor implicite ~i regulilor. Asemenea
procedurilor stocate, declan~atoarele contin instructiuni Transact-SQL.
Func1;.ii
SQL Server 2017 ofera o gama de functii incluse (built-in), care permit executarea anumitor operatii
de procesare a datelor. Exista posibilitatea de creare a functiilor· definite de utilizator. De regula,
functiile sunt specificate de parametri, insa existii ~i exceptii - functii ce nu au parametri ( aceste
functii, de obicei, se afla alaturi de cuvantul DEFAULT). Parametrii care specifica baza de date,
calculatorul, loginul sunt, deseori, optionali. Dacii ace~tia nu sunt specificati, implicit este utilizata
baza de date curentii, calculatorul-gazdii etc. SQL Server 2017 distinge 4 categorii de functii pe care
le poate defmi utilizatorul. Cu cele mai importante se va face cuno~tinta in procesul studierii
limbajului Transact-SQL.
Tipuri de Date
in SQL Server, fiecare coloanii, variabila localii, expresie este asociatii cu un tip de date. SQL
Server ofera o gama foarte largii de tipuri de date. Cu toate acestea, in Transact-SQL sau Microsoft
.NET Framework, utilizatorul poate crea tipurile sale de date. Tipurile de date alternative (definite
de utilizator) se bazeaza pe tipurile de date din sistem. Caracteristicile acestor tipuri de date preiau
din metodele ~i operatorii claselor create in limbajele sustinute de Framework.
Reguli
Regulile (Rules) sunt instrumente care indeplinesc acele~i functii ca ~i constrangerile CHECK.
Utilizarea constrangerilor CHECK este mai preferatii pentru restrictionarea valorilor coloanelor.
Acestea, de asemenea, sunt mai concise decat regulile. Asupra unei coloane poate fi aplicatii doar o
singurii regulii, spre deosebire de constrangerea CHECK care poate avea o aplicare multipla asupra
unei coloane. Constrangerile CHECK sunt parte componentii a instructiunii CREATE TABLE, in
timp ce regulile sunt create ca obiecte aparte ~i apoi sunt legate de coloane.
Sequences
0 secventii este un obiect din schema definit de utilizator. Rolul unei secventei este destinat
generiirii valorilor numerice, conform specificatiilor definite la crearea secventei. Secventa de valori
numerice este generatii, intr-o ordine cresciitoare sau descresciitoare, la un interval definit.
Secventele, spre deosebire de coloanele de tip Identity, nu sunt asociate cu tabelele. Aplicatiile de
utilizare pot referi un obiect de secventa ~i coordona valorile cheilor in mai multe randuri ~i tabele.
in urmatorul tabel, sunt prezentate cerintele soft generalizate pentru sistemul SQL Server 2017:
Software Exigente
Sistem de operare Windows 8.1 ~i Windows Server 2012 SP2 (cu KB2919355
preinstalat) sau sistemul de operare mai superior
Framework .NET Framework 4.6
La urmatorul pas, se alege limba, tipul fi~ierului (ISO sau CAB) ~i locatie de descarcare. Apoi, se
apasa butonul Download pentru a continua descarcarea sau Close, pentru a intrerupe descarcarea. Fie, in
cazul nostru, s-a descarcat fi~ierul ISO, care se monteaza ca un DVD drive.
1. Pentru a pomi instalarea, se acceseaza kit-ul de instalare, ~i se aplica un dublu-click pe fi~ierul
Setup.exe, asistentul de instalare lanseaza SQL Server Installation Center.
r······----·-··-··-·---···--···-·····-··-·-·
I ~; L~ .. I Application To·:il;
2. Pentru a pomi instalarea nouli, in partea stanga a ferestrei se selecteaza meniul Installation ~i
apoi in partea dreapta se face click pe New SQL Server stand-alone installation or add
features to an existing installation.
Plannin New SOL Server stand-alone installation or add features to an existing installation
Launch a wizard to install SQL Ser11;r 2017 in a non-clustered environment or to add
I nstaJiation
features t o an existing SQL Serve.r 2017 instance.
Maintenance
Insta ll SQL Ser1er Reporting Ser1ices
Tool s
Launch a download page that provides a link to install SQL Seiver Reporting Services.
Resources An internet connection is required to imta ll SSRS.
Advanced
1j ···i Install SQL Server Management Tools
Options ;.. ~ Launch a download page that provides a link to imta ll SQL Server Management
Studio, SQL Server command-line utilities (SQLCM D and BCP), SQL Seiver PowerShell
provider, SQL Server Profiler and Database Tuning Advisor. An internet connection i;;
required to install these tools.
Product Key
Specify the editio11 cf SQL Server 2017 to install.
Product Key Validate this instmce of SQL Server 2017 by entering the ZS-character ~ey from the Microsoft certificate
of authenticity o r product packaging You can also spec if)' a 'ree edition of SQ._ Server Developer,
License Term s
Eva luation or Express. Evaluation has the !argest set of SQL Server features as cocumented in SQL Server
Global Rules Books Onlme, and is activated "' ith a 1SO-day expira:ion. Oeve oper edition does not have an expiration
Microsoft Update has the same set cf features found in Evaluation. but is licMsed for r1on-production database applicatio n
development only. To upgrade from one installed edition to a nother run the Edition Upgrade Wizard.
Product Updates
Insta ll Setup Files
'! ·.$pecify a free edition:
ln >ta ll Ru les
Feature Se!ecti on Developer
Feature Rul es
'_) Inter t he produc t key:
Feature Configuration Rules
o ... ~..J... ~.... 1......... 11
- - - - - ----- - - - - - -
4. In continuare, se deschide pagina License Terms. Pentru a instala SQL Server 2017, este
necesar sa se accepte conditiile de licenta prezentate in fereastra din dreapta. Se activeaza
radio-butonul I accept the licence terms, apoi se apasa Next, pentru a continua instalarea sau
Cancel, pentru a intrerupe instalarea.
lnstalarea ~; conjigurarea S QL Server
Product Key
MICROSOFT SOFTWARE LICENSE TERMS
License Terms
Globa l Rul es MICROSOFT SQL SERVER 2017 DEVELOPER
--~~~f
-;~-=~;;;~~;;;;;;~::::====================
~ "'"'"h• '"ffi~ "~· )
L Microsoft Updote
- " -
SQL SeIVe r 20 17 transmits informat ion about y ou r installatio n experie nce, as we!I as o ther usage apd
performa nce d ata. to Microsoft to help improve the product. To learn more about SQL SeNer 2.017 d ata
processing and privacy controls, pi.ease see the Privacy Statement
5. Mai departe, la pasul Global Rules, asistentul va parcurge mai multe verificari ~i va trece, in
mod automat, la pasul urmator, dacii nu vor fi depistate erori. in caz de e~ec, la verificare,
asistentul va livra masuri de corectare pentru a face posibila continuarea procesului de
instalare.
ele
ste 6. Asistentul trece la urmatorul pas - Microsoft Update. Pentru parcurgerea mai efectiva a
:ge acestui pas, Microsoft vii recomanda sa aveti o conexiune la internet activata. Conexiunea va
(se oferi sistemului posibilitatea sa descarce pentru produse SQL Server eventualele actualizari.
rea in cazul 1n care nu sunt descoperite actualizi\ri ale produselor, asistentul va parcurge pagina
aceasta fiira a o afi~a ~i va examina urmatorul pas de instalare.
Un alt caz cand poate aparea fereastra Microsoft Update, este acela in care opfiunea de
_
Ill verificare a actualizarilor este deconectata la nivel de sistem de operare din Control Panel.
Pentru a include actualizarile la instalare, trebuie sa fie marcat butonul Use Microsoft
Update to check for an update, apoi se face un click pe butonul Next.
.............................. ..
SOL Server 201 7 Setup - Cl
Microsoft Update
Use Microsoft Update tc check fo r important updat.es
Feat u re Selection
este
aza 7. Pe pagina Install Setup Files, sunt afi~ate informatiile referitoare la progresul de descarcare,
sau extragere ~i instalare a fi~ierelor. in cazul 1n care se constatii o actualizare descarcata la pasul
precedent ~i ea este specificatii sa fie inclusii, aceasta modificare, de asemenea, va fi
instalata.
Instalarea ~i configurarea SQL Server
8. in continuare, apare fereastra Install Rules, care lanseaza modulul de control al configuratiei
sistemului System configuration checker pentru depistarea problemelor ce pot aparea la
etapa de initializare a instalarii. Mesajele aparute pot fi vizionate sub forma de rapoarte
detaliate, apasand butonul Show details sau accesand meniul View detailed report.
Raportul reprezinta o lista de reguli care trebuie sa fie indeplinite ~i statutul acestora. Daca
eel putin una din reguli nu este respectata, instalarea nu este posibila. Daca toate regulile sunt
respectate (statutul este Passed), asistentul trece la etapa urmatoare in mod automat . Daca
vreo regula are statutul Failed, atunci instalarea se anuleaza pana la corectarea cauzei ce a
provocat e~ecul, adica se apasa butonul Cancel.
Install Rules
Setup rules identify potential problems that might occu r white running Setup. Failures must be corrected before Setup
ca.n t:ontinue.
9 Installation Type - in aceasta fereastra se alege una din cele 2 optiuni disponibile. Perform a
new installation of SQL Server 2017 - instalarea unei instante noi SQL Server, sau Add
features to an existing instance of SQL Server 2017 - adaugarea unor componente/optiuni
noi la o instanta deja existenta. Daca, pe m~ina data, nu exista nicio instanta SQL Server,
sistemul trece la pasul urmator.
I 0. in fereastra Feature Selection, se aleg componentele SGDB-ului ce vor fi instalate, selectand
vreun obiect ID panelul Features din centru din arborele de componente.
in panelul din dreapta Feature description poate fi citita o scurta descriere a acestuia,
prerechizite necesare ~i spatiul ocupat de discul rigid. La instalare pot fl programate diferite
combinari de componente. Vom selecta toate optiunile ID afara de Machine Learning
Services ~i PolyBase Query Service for External Data.
Tot in aceasta fereastra se poate modifica adresa directoriului unde va fi instalat sistemul.
Modificand datele din campul Instance Root directory se editeaza directorului-radacina al
instantei. Campul Shared feature directory permite editarea directoriului componentelor
comune pentru toate instantele SQL Server pe serverul dat. Apasand butoanele Select All sau
Unselect All, pot fi selectate sau deselectate, respectiv, toate componentele din arborele de
componente. Dupa, se apasa butonul Next.
Instalarea li configurarea SQL Server
Feature Selection
Select the Developer features to install.
Product Key
0 Lookmg for Reportm.g Serv1CF....s ? Download it from the web
license Terms
Global Rules Eeatures: Feature de~ription:
Micros:oft Update 1mtance Features ,.., Includes the Database Engine. the core service
Product Updates for stori ng, processing and securing data. The
Replication 1 Database Engine provides controlled access and
Install Setup Files
CJ Machine Learning Services (In-Database) rapid trans.action processing and ,al.so provides
Install Rule.s-
[J R
Feature Selection £.rerequisites for select ed features:
[J Python
Feature Rules i;?.JFull-Text and Semantic Extractions for Sear Already installed:
Instance Configuration L~I Data Quality Service< Windows PowerShell 3.0 or higher
Server Co nfig uration ::] Po lyBase Query Service for External Data Microsoft .NET Framework.4.6
~ Ana lys is Services
Data ba!<e En gine Configuration
Shared Features
Ana lysis Services Configuration Q.is.k Space Requiremen ts
[J Machine Learning Server (Standatcne)
Integ ratio n Services Scale Out .. . DR Drive C: 3081 MB req•Jired, 69167 MB available
Integration Ser1ices: Scale Out .. . [] Python
r;,;1 Data Oua litv Client
Distributed Rep lay Controller ! <
Distributed Replay Cli ent
Feature Configuration Rules: 5elect~_ll l.J.nselect All
Ready to Insta ll
Instance root directory: (:\Program Fi les\ Microsoft SQL Ser1er\
Installation Prog res-s
Complete ~haied ;earure direc~cry:
Shared feature directo1y ~86): (:\P rogram File< (x&6)\Microsoft SQL Server\
<!lack Cancel
11. Fereastra Feature Rules - procesul de instalare valideaza con:figuratia inainte de a finaliza
operatiile de instalare. Mesajele aparute pot fi vizionate sub forma de rapoarte detaliate,
apasand butonul Show details sau accesand meniul View detailed report. Activitatile
a aplicate in aceasta fereastra sunt similare cu cele din pasul 8. Daca totul este in ordine ~i
'd verificarile au trecut cu succes, se trece, in mod automat, la urmatorul pas.
11
r, 1.2.3. Configurarea sistemului
1. in urmatoarea fereastra, Instance Configuration, se specifica numele instantei sau sufixul Id-
td ului acesteia. Implicit numele instantei coincide cu Id-ul. Acest lucru este specific ~i pentru
instantele numite. Pentru a da un Id-sufix diferit de numele instantei, se editeaza campul
Instance Id. Numele implicit al instantei ~i Id-sufixul e MSSQLSERVER.
a,
te SQL Server 2017 Setup
rg
Instance Configuration
Spec ify the narne a nd instance ID for the instance of SQL Server. Instance ID becomes part of the installation pa.th.
11.
al
Product Key ·! ' Q.efault instance
or license Terms
.) N~med instance: MSS.C:LS.ER'-,-EF
m Glob al Rules
ie Microsoft Update
Product Updates M',SQLSERVER
Instance lD:
Install Setup File;
Install Rules
Feature Selection SQL Seo.. er directol}': ( :\Program Files\ Microscft SQL Server\MSSQL 14.MSSQLSERVER
Feature: Rules Analym Servi< es directol}': (:\Program Files\ Micrcsoft SQL Server\MSAS14.MSSQLSERVER
Instance Co nfigu ration
Im.tailed instances:
Server Configuration
Databaoe Engine Confi guration Instance Name Instance ID Features Edition Ve:rsion
lnstalarea fi conjigurarea SQL Server
in campul Installed instances se pot vedea instante ale SQL Server care, deja, exista pe
calculatorul dat. Pentru a continua, se actioneaza butonul Next.
2. in fereastra Server Configuration a asistentului de instalare, este necesar sa se atribuie
serviciile SQL Server pe conturile utilizatorilor din numele carora vor rula serviciile
respective. Se poate atribui un cont pentru toate serviciile sau se poate configura fiecare
serviciu individual.
Server Configuration
SJ>ecify the service accounts and collation configuration .
___ ____
License Terms
Mic ro soft rec ommends that you use a separat e accoun t for each SQL Server serv ice.
Global Rules .,... """"""""""'~'"""""'
Product Updates , SQL Server Agent NT Service\ SQLSERVERA ... Automatic ...
Install Setup Files
Install Rules
· SQL Server Databa se Engine
Distributed Replay Client Thi s privi1ege enables in;tant file initiaiization by avoiding zeroing of data pages. This may lead to
Feature Configuration Rules information di>closure b'f allowing del eted content to be accessed.
Instance Configuration
Server Configuration
Database Engine Configuration
Analy!;is. Services Configurat io n
S.QL Server a.dminis:trators:
have: unrestricted access to
~----------'-l the Database Engine,
Complete
Tot la aceasta etapa (Database Engine Configurafion), trebuie mentionat ca fila Data
Directories se utilizeaza pentru definirea directoriilor de instalare a fi~ierelor bazei de date,
diferite de cele implicite. Pentru a modifica caile spre directoriile de stocare a fi~ierelor, poate fi
utilizat butonul Browse sau acestea pot fi editate manual.
lmtall Rules System dat abase di rec tory ( :\ Program Files.\ Mic roso ft SQL
Installatio n Type Server\ MSSQL14.MSSQLSERVER\ MSSQL \ Da ta
Fila TempDB se utilizeaza pentru definirea directoriilor de instalare a fWerelor temporare ale
bazei de date, diferite de cele implicite.
Locatia fWerelor se define~te similar cu fila descrisa anterior. Insa, aici, se poate defini din
start numarul de fi~iere din baza de date (campul Number offiles), marimea lor initiala in MB
(campul lni{ial size) ~i marimea de cre~terea (campul Autogrowth). Exista mai multe criterii
pentru organizarea, in mod adecvat ~i coerent, a TempDB. Aceste aspecte fac parte din
domeniul de administrare a bazelor de date ~i dep~esc limitele acestui manual.
lnstalarea fi conjigurarea SQL Server
Product Updates 64
[nitial size (MB): Total initial size (MB): ' 256
In.tall Setup Fil es
Install Rules Autogrowth fMB): 64 Total •utogrcwth (MS): 256
Featu re Selection Qata directo-ries: 6.dd ...
Featu re Rules
Instance Config uration
Server Config uration
Database Engine Configuration
Ana lysis Ser1ices Configuratio n
Integration Ser1ices Scale Out ...
Integration Ser1ices Sca le Out ...
Distributed Rep lay Contro ller
_,
Distributed Rep lay Client TempDB log file: templog.ldf
Feature Co nfig uration Ru les
Initial ~ize (MB): 64 Setup could take longer with large initial size.
Ready t o l11stall
Insta ll ation Prog ress Autc£J,rowth (MB) : 54
Complete
1.og directo1y: D:\TEMPDBLOG
4. in
fereastra Analysis Server Configuration. aparuta se executa operatiuni de configurare a
serviciului OLAP. In cazul nostru, ramane totul implicit. Restul setarilor sunt similare cu cele
aplicate la pasul 3, Database engine configuration. Pentru a trece la etapa urmatoare de
instalare, este necesar sa se specifice eel putin un utilizator care ar avea rolul de administrator
Analysis Server la nivel de sistem de operare. Dupa setarile respective, se apasa butonul
Next.
5. in urmatoarele 2 ferestre:
Integration Services Scale Aut Configuration - Master Node
Integration Services Scale Aut Configuration - Worker Node
se accepta configuratia implicita ~i se apasa butonul Next
6. La urmatorul pas, Distributed Relay Controller, se specifica eel putin un utilizator care va
avea rolul de administrator al serviciului SQL Server Relay Controller. Dupa setarile
respective, se apasa butonul Next.
7. La pasul Distributed Relay Client se lasa proprietatile implicite. Pentru a continua, se apasa
butonul Next
8. Urmatoarea fereastra, Ready to install, apare in cazul in care sistemul este pregatit de
instalare. Utilizatorul este informat despre componentele selectate pentru instalare ~i
configuratia lor pentru a avea posibilitatea de a verifica inca o data inainte de a fi lansat
procesul de instalare propriu-zis. Dupa apasarea butonului Install, procesul de instalare este
Ian sat.
9. Se deschide fereastra Installation Progress, unde poate fi urmarita parcurgerea procesului de
instalare. Este afi~ata o hara de progres, iar mai jos se scriu comentariile despre starea curenta
a procesului de instalare.
10. Dupa ce procesul de instalare se termina cu succes, apare pagina Complete cu mesajul:
,,Your SQL Server 2017 installation completed successefully with product updates", iar
mai jos se afi~eaza rezumatul starii de instalare pentru fiecare componenta a SGBD-ului. In
partea de jos a ferestrei, se ofera un link spre fi~ierul log care contine informatii sumare
despre procesul de instalare. Pentru a inchide asistentul de instalare, se apasa butonul Close.
Complete
rare a Your SQL Server 2017 install.ation completed successfully with pre.duct updates,
ii cele
tre de Pro duct Key
!_nformati on .about the S.etup operation or possible next >teps:
trator License Terms
1tonul Global Rules
Feature Statu s
,; L
Microsoft Update
t.:j Data Qual ity Ser1ices Succeeded
Product Updates •.//# Ful l-Text an d Sem ant ic Extracti ons fo r Search Succeeded
ln>tall Setup Files l~ Data base Engine Services Succeeded
ln rtall Rules ;ii SQL Ser1er Repli cati on Succeeded
Feature Select io n
'~ Analys i>Services Succeeded
Feature Rul es
V SQL Browser Succeeded
1.; c;,01 Writrr 'l11 crrPrlrrl
ln >tance Confi gu ration
Server Configuratio n
QetaJls:
Database Engin e Co nfiguratio n
Analysis Services Configuration Insta ll successful.
· S ervices Sc ale
Summary lc-g fil e has been saved to the fellowing loc ation :
Complete
( ;\Progra m ~iles\tvlicrcsoft SQL Ser11er\ 14D\ Setup Bootstrap\Log\20171203 2151 00
\ Summary MV 20171203 215100.m
Closce
Instalarea ~i configurarea SQL Server
Uneori, pentru pornirea corecta a sistemului SQL Server, dupa instalare se recomanda
re~tantarea calculatorului.
Procesul de instalare a versiunii SQL Server 2017 Express Edition [27] se deosebe~te putin de
eel descris anterior
Planning ·:i\J New SQL Server stand-alone installation or add features to an existing installation
Installation
'-'.;J Launch a w izard to im:ta ll SQL 5erver 2017 in a non-clustered environment o r to add
features to an e:xi>ting SQL Server 2017 imtance.
Maintenance
Install SQL Server Reporting Services
Tools
Launch a download page that provides a lin k to imtall SQL Server Reporting Service>.
Re~ources An internet connection is required to in>tall SSRS.
Advanced
Options
c:::::::> :!~. ~~~~~~===~~~,~e-s a 1 link to in stall SQL Server Management
Studio, SQL Server command-line utilities (SQLCMD and BCP), SQL Server PowerShell
prov ider, SQL Server Profiler and Database Tuning Adviso r. An internet connection is
requ ired to install these tools.
2 Dupa ce se va face clic pe Install SQL Server Management Tools, se va deschide o pagina
web de pe situl Microsoft de unde este nevoie de descarcat fWerul executabil pentru instalare
versiunii recenta al sistemului Management Studio.
3. Dupa ce fi~ierul de instalare este descarcat pe m~ina locala, se face dublu click pe el, ~i apare
fereastra de bun venit a asistentului. Aici se apasa butonul Install pentru a incepe instalarea.
Instalarea # conjigurarea SQL Server
1.2.5. lnitializarea
, serviciilor
inainte de conectare la sistemul SQL Server, pe server, trebuie sa fie activate serviciile sistemului
[4]. Daca, m timpul procesului de instalare, au fost alese corect serviciile sistemului SQL Server, necesare
sa se lanseze automat impreuna cu sistemul de operare, procedura care urmeaza nu trebuie executata. Daca
aceste optiuni nu au fost setate din diferite motive, pentru intrarea m baza de date, initierea unor servicii
SGBD-ului SQL Server este obligatorie.
Pentru aceasta, trebuie sa fie executati urmatorii pa<ji:
1. Se activeaza Start Screen ~i se selecteaza optiunea Apps.
2. in lista aplicatiilor disponibile se alege categoria Microsoft SQL Server 2017.
3. Se selecteaza elementul SQL Server 2017 Configuration Manager
in acest punct, pe ecranul calculatorului, va fi prezentata urmatoarea fereastra:
··~ SQLServer Configurati on Man ager {Local) Na me State Sta rt Mode Log On A• Process ID
:J SQL Server Ser1ices
~SQL Ser1er lntegrati c>n Serlice< 14.0 Runn ing Automatic NT Ser.<ic<\ MsDtsS ... 1752
.JJ.. SQL Server N•two rk Confi guration ~ SQL Full -text Filter Daemon Launcher (MSSQLSERVER) Running Manual NT Se1v ic.e\ M5SQL.. . 3724
.~. SQL Native Client 11.0 Configuration
[:» SQL S•wer (MSSQ LSERVER) Run ning Auto matic NT Service\ MSSQL .. . 1&08
.1. SQL Server N etwo rk Configu ration (if)SQ L Seiver Analysis Service> IMSSQLSERVER! Runnin g Automati c tH Service\ MSSQL .. . 1848
.~. SQL Native Client 11 .0 Co nfigurati on
~ SQL Server Brow;er Ru nning Auto matic NT AUTH ORITY\LO... 1%4
@ SQL Server Agent (MSSQLSERVE R) Runn ing Auto mati c NT Service\ SQLSER... 2808
4. Pentru a gestiona vreun serviciu al sistemului SQL Server, se apasa butonul respectiv pe bara
de instrumente. Se poate observa ca pe bara de stare a serviciului selectat a aparut mesajul
corespunzator (Stopped, Running sau Paused.).
Acelea<ji operatii de lansare ~i stopare a serviciului pot fi executate, apasand butonul drept al
mouse-ului asupra serviciului ales sau din bara de meniuri. Daca, m meniul contextual aparut,
se apasa Properties, se deschide fereastra de setari avansate pentru serviciul dat. Alegand fila
Service m proprietatea Start Mode, poate fi indicat modul de lansare a serviciului respectiv.
Apoi se apasa OK.
lnstalarea ~i conjigurarea SQL Server
:r (Le
ition
urati
Log On
SQL Server (MSSQLSERVER) Properties
I
.tart
\ uto1
itlanL
" \uto1
f1V
uame SQL Sm ~r MSS~LSER» ER'
Process ID laJE
5Ql Si:r t:1
Auto mati c
State Automati c
Disabled
' Manual
Start Mode
The start mode of this service,
5. Daca, in loc de initializare (click pe butonul Start Service), se executa un click pe butonul
Pause Service asupra serviciului respectiv, noi operatiuni ale utilizatorilor nu vor fi executate,
insa tranzactiile executate in acel moment nu vor fi paralizate. Iar in cazul in care se va da un
click pe butonul Stop Service, toate tranzactiile vor fi finalizate ~i utilizatorii vor fi
deconectati de la serviciul respectiv.
Trebuie mentionat ca activitatile cu SQL Server Configuration Manager (lansarea ~i stoparea
serviciilor de sistem) pot fi realizate numai de utilizatorii cu drepturi de administrator de
sistem de operare.
SQL Server
Server type : Database Engine v
:S,erver name : j v
5. Dupa apasarea butonului Connect, apare fereastra de .mai jos. Pentru a vizualiza partea
dreapta a ferestrei (Object Explorer Deatails), se apasa F7.
~
Cu1d Launch lCtrl·~ QI p rl x
L'if Object Explorer Details - Microsoft SQL Server Management Studio
f ile J;dit ':liew l ools ~indo w !:ielp
ti) . . ~
~ .,'ill tjew Query ..'ill ~ .~ x~u'f?! . ~ ;
tonul
Object Explorer Detail' ·1:1 X
1tate, •• )<••
,a un Connect• l l
>r fi - ~ MV (5QL Server 14.0.1 000.169 - sa) MV (SQL Server 14.0.1 000.169 - ~a)
Databa ses
Security Name Policy Hea lth State
- - --~
Ready
mt
6. in fereastra respectiva, se face un click-drept pe server in Objest Explorer ~i din meniul de
:o context se alege optiunea Register.
1ul
~i
lnstalarea fi conflgurarea SQL Server
.,
L "<' Obj ect Explorer Details - Microsoft SQ
file ~i ew Qebug Ioo ls Wind ow
. ~
General
New Server Registration
You can replace the registered server name wrth a new name and 0 )J_se custom color: D
optional server description .
..,
L~;- Obj ect Explorer Details - Microsoft SOL Server Management
1 File Edit View Tools Win do N Help
n
ta . .~ ill I J§! New Query J§! ~~ fH~1 l~ o~ '
tt Registered Ser1ers Object fxpforer Details c-R X
ii co ~ Im
II ,. i3 iiDatabase Engine MV (SQL Server 14.'0.10Co0.1 59 - s.
i 2 Local Server Groups:
. tJ LOCALDEV01 Name
id Databa ses.
~ mv ] New Query (
Central M1- Objects
Object Explorer
r .. -1 .. - -L- n_1:_ ; __ '.ti on
Trebuie mentionat ca, in functie de componentele instalate ale sistemului Microsoft SQL Server, pot
fi inregistrate urmatoarele tipuri de servicii: Database Engine, Analysis Services, Reporting Services ~i
Integration Services. Instantele locale sunt inregistrate automat la prima lansare a sistemului
Management Studio, dupa instalarea SQL Server.
Selecta page
1" General
.D' Script ...
Server Properties. - MV
Help
r:i -
1" Memory
ma
,,
1' Processors
}I Connections
Server authentication
Progress
Ready
al
QL OK Cancel
ca
ce
QL
de 1.4.4. Crearea login-ului propriu
Daca SQL Server utilizeaza modul de autentificare mixt, vor trebui create conturi care contin nume
~i parole specifice pentru utilizatori. Pentru crearea conturilor, se parcurg urmatorii p~i:
1. Se da pe arbore un click pe semnul "+" din partea serverului care va receptiona un login nou.
se
2. Se aplica un click pe semnul "+"al mapei Security.
3. Se face un click-drept pe elementul Logins. in consecinja, apare imaginea urmatoare:
l ogi n - New
Seleet a page rJ' Script .... i;-t Help
}' General
}' Server Roles
}' User Mapping Login o.ame : Ion
}' Securables
! }' Status '·- 1 1!!1ndows authentication
1 ~ ' S.O L Server authentication
£assword : ••••••••
9Jnfirm password :
······-··
P i Enforce password policy
R] Enforce password eio;piration
G?.] ]Js.er must change password at next login
Mapped to ce[lificate
Pr<>!J'SS
Ready master
Default gatabase:
ra .
Ill Object Explorer Details -ti X
1± Databa se>
1- Security fl.Jame
Loginul sa este predefinit ca un cont de tipul administrator de sistem ~i nu poate fi ~ters sau
transforrnat intr-un cont cu acces limitat. inainte de activare a acestui login, sistemul impune utilizatorul sa
stabileasca o parola pentru acesta. Implicit in SQL Server 201 7, acest cont este in stare dezactivata
(Disabled).
I~
0: setupadmin
:es la PolyBase ? sysadn1in
Always On High Availabilit-;
1entru
!T. Se
I Iii
I Select a page
JI General
.(T Script .,. 9,;, Help
Logi n Pro perties - Ion
c:l -
JI ~·=
}t User Mapping Server role is used to grant server~,;ide se~rit'/ privileges to a user.
JI Securables
/; Status
.$.erver roles:
0¥v b~1k~¥d~i~; · ·· ········-···········~······
D dbcreator
D diskadmin
D processadmin
[~ pub lic
[ ] securit't admin
D ser~eradmin
D setupadmin
[ ] Si'Sadmin
Conneclion
Server:
MV
Connection :
MV·'1Tlarian
Progress
Ready
OK Cancel
in afara de determinarea grupului din care va face parte utilizatorul nou, exista ~i sarcina de stabilire
a permiselor de acces la baze de date. Adicii, se specifica ce baze de date, deja, create le va putea accesa
utilizatorul nou ~i ce permisiuni de acces va avea acest utilizator.
In afara de sistemul de gestiune a permisiunilor la nivel de server, Server Roles, exista sistemul de
definire a accesului la nivel de baza de date. Un login poate fl declarat cu o baza de date sau mai multe
baze de date ca un utilizator (User) de baza de date. Fieciirui utilizator din baza de date i se aloca un
an um it Database Role.
lnstalarea ~i configurarea SQL Server
Conne.dion
Server:
MV Database [Ole membership for: AdventureWorks2U17
Connection:
MV\ marian
fO db_accessadm1n
TJ db_backupDperator
'tf View connection properties 'O db_datareader
iO db_datawriter
L.i db_ddladmin
ID db_denydatareader
!0 db_denydatawriter
Pr~
Ready
,-· - OK Cancel
Sarcini practice:
l. Sa se instaleze SQL Server 201 7, urmarind procedurile descrise in lucrarea data.
2. Sa se inregistreze serverul pe calculatorul disponibil, alegand tipul de autentificare SQL.
3. Sa se creeze trei loginuri de utilizatori care sa posede SQL Autentificarea.
a) Sa se aloce primului utilizator acces la schema HumanResources din baza de date
AdventureWorks2017. Utilizatorul dat trebuie sa aiba posibilitatea sa citeasca ~i sa
editeze datele din tabelele schemei respective.
b) Utilizatorul #2 trebuie sa aiba acces numai la citirea datelor din schema Sales din baza de
date AdventureWorks2017. in acel~i ti.mp, el trebuie sa aiba posibilitatea sa gestioneze
orice obiect ~i continutul acestui obiect din baza de date Adventure WorksD W2017.
c) Utilizatorul #3 trebuie sa aiba posibilitatea crearii hazelor de date noi ~i definirii accesului
laele
Familia bazelor de date sample AdventureWorks2017 poate fi incarcata de pe adresa:
https://github.com/Microsoft/sql-server-samples/releases/tag/adventureworks
De asemenea, unele versiuni mai vechi pot fi gasite aici:
https ://msftdbprodsamples.codeplex.com/releases
Crearea §i intre/inerea bazei de date
p<ige
02:0000
•••
in SQL Server, dimensiunea paginii este de 8 Kb, ceea ce semnifica faptul ca o baza de date
continea 128 de pagini per 1 Mb. Fiecare pagina incepe cu un antet de 96 octeti, care e folosit pentru
stocarea informatiei de sistem despre pagina respectiva. Aceasta informatie include: numarul paginii, tipul
ei, volumul spatiului liber pe pagina ~i ID-ul asociat obiectului, proprietar al acestei pagini.
Randurile de date sunt amplasate pe pagina in mod secvential, incepand imediat dupa antet. Tabelul
de adrese ale randurilor (row offset table) incepe la sf'ar~itul fiecarei pagini, ~i acest tabel continea cate o
intrare pentru fiecare rand de pe pagina. Fiecare celula arata cat de departe, de inceputul paginii, se gase~te
primul octet al randului. Intrarile in tabelul de adrese sunt in ordinea inversa ordinii randurilor pe pagina.
~~~~~~~--<
MicroS-Oft SQL
-
Server Data Page
Page heacler
Data row 1
Data row 2.
Data row 3
Fr ee Space
3 2 1 Row offsets
2.2.1. Lansarea SQL Server Management Studio pentru crearea bazei de date
Crearea bazei de date se va realiza ill SQL Server Management Studio. Pentru aceasta, se
procedeaza ill modul urmator:
1. Se activeazii Start Screen ~i se selecteaza optiunea Apps.
2. in lista aplicatiilor disponibile se alege categoria Microsoft SQL Server Tools.
3. Apoi se trece ~i se selecteaza, cu un click, optiunea Microsoft SQL Server Management
Studio
Crearea # intrefinerea bazei de date
4. In fereastra Object Explorer, serverul disponibil se extinde, aplicand un click pe semnul "+"
din stanga lui. In rezultat, se expandeaza un arbore de obiecte ce alcatuiesc serverul respectiv.
5. in acest punct, se face un click cu butonul drept al mouse-ului asupra optiunii Databases. Pe
ecranul calculatorului, va fl reprezentata urmatoarea fereastra:
..,
.~~x' Object Explorer Details - Microsoft SQL Server Management StU(
File Edit View Debug Teoh Window Help
'
ta . ~ C"
wlil i lll NewQueiy lll H~ D~
!':)\
U~lil t~ !
Object Explorer
Connect• f >·¥
tlta a
li S.ecurit>J New Databas.e ... 1
: date
I. Server Ob
Attach .. .
----- v
I Replicatic y
~u un i+' PolyBase Restore Database ... ~:entureW orks 20 1 7
+j Alw·ays 0 Restore Files and Filegroups ...
+" Managen
ar de Filter
(= integratio
~F zfiJ S.QL S.ervt Deploy Data-tier Application .. .
vzt pot ± El XEvent Pr Import Data-tier Application .. .
Start PowerShell
Reports
;ta, se 6. in meniul de context, se efectueaza un click pe optiunea New Database. Ca rezultat, pe ecranul
calculatorului, va aparea fereastra de creare a bazei de date noi.
:ement
Crearea # intrefinerea bazei de date
New Database
Select a page [I' Scnpt y ,., Help
/.- General
/.- Options
/.- Filegroups Database o.ame:
Qwner: <.default>
Database files:
logical Name File Type Rlegroup lnrtial Size /ILJtogro"1h I Maxsize
,. .......................... , ,,, , , , ,,.,
Connedian
Server:
MV
Connection :
sa
Vl lfiew c.onnection properties
Progress
Ready <
OK Cancel
10. Pentru modificarea valorilor implicite ale fi~ierelor cu date ~i log, in tabelul Database files se
executa un click in celula respectiva ~i se insereaza valoarea noua.
• in campul Logical name, se insereaza numele logice ale fi~ierelor fizice ce constituie
baza de date. Aceste nume logice trebuie sa corespunda regulilor SQL Server ~i trebuie
sa fie unice pentru baza de date respectiva.
• Campul File type permite modificarea tipului de fi~iere (data sau log) .
• Campul Initial Size specifica dimensiunea initiala a fi~ierului in megaocteti.
• In ciirnpul Autogrowth/Maxsize, se insereaza unele date referitoare la cre~terea bazei de
date. Drept standard, asistentul considera ca baza de date va avea o cre~tere de 10% in
raport cu marimea curenta sau lMB.
Crearea # fntrefinerea bazei de date
date.
te de ~ ~able Autogrov.~h
·! • In Megabytes
Maximum File Size
~xing.
date (~;. jJmlted to {MB}
~ntate
11.nlimited
.ctere, OK Cancel
_J
1erand ! - _
~General
1' Options
.I- Filegroups Database name: univers-ttatea
Database files :
logical Name Rle Type Filegroup lnttia! Size (MB) Allogro••1h I Maxsize Path
universttatea ROWS ... PRIMARY €4 8'1 64 MB. Limited to 256 MB D:\DATA\
universitatea_log LOG Not .Al)plicable 64 8'; ·6'! MB . Unlimtted D:\LOG\
universitatea Rle2 RO'.'I~ .... 9. D:\DATA\
-
universitatea Rle 3
- RO'. Iii New Fi!egroup for universitatea D:\DATA\
Name : userdatafroup01
Connection
Options :
Server:
MV CJ Read-only
Connection : ~Default
sa
v'f View connection properties Current default fUegroup : PRIMARY
OK Cancel
Progress
in cazul in care obiectele sunt create in baza de date, tara specificarea grupului de fWere
caruia aparJ:in, ele sunt atribuite grupului implicit. intr-un moment de timp, doar un grup de
fWere poate fi desemnat drept grup de fi~iere implicit. Fi~ierele din grupul de fi~iere implicit
trebuie sa fie destul de mari pentru mentinerea obiectelor noi neatribuite unui alt grup de
fi~iere. Grupul de fi~iere PRIMARYeste implicit.
Atunci cand se define~te un nou grup de fi~iere implicit, fi~ierul primar va contine numai
tabele ~i obiecte de sistem. Trebuie mentionat ca fi~ierele Transaction log nu pot face parte
nici dintr-un grup de fi~iere.
in cazul nostru, se specifica in calitate de grup de fi~iere implicit - userdatafgroupOl , bifand
butonul respectiv.
In continuare, sunt enumerate unele optiuni aditionale mai des utilizate sau care prezinta un
interes deosebit [18] .
• Auto Close - se indica daca baza de date se inchide fara erori ~i se elibereaza resursele
dupii ce ultimul utilizator a incheiat sesiunea. Valorile posibile sunt True ~i False. in
cazul valorii True, baza de date este inchisii fara erori ~i resursele ei sunt eliberate dupii
1iere parasirea ei de catre ultimul utilizator.
p de • Auto Create Incremental Statistics - se specifica dacii va fi utilizatii optiunea
>licit incrementalii in cazul cand sunt create statistici pentru partitie. V alorile posibile sunt
p de True sau False.
• Auto Create Statistics - se indica dacii baza de date creeaza in mod automat statisticile
nna1 de optimizare care lipsesc. Valorile posibile sunt True sau False. in cazul valorii True,
Jarte toate statisticile ce lipsesc, necesare pentru o cerere de optimizare, sunt construite ill mod
automat pe parcursul optimizarii. Pentru mai multa informare, vezi CREATE
land STATISTICS (Transact-SQL).
• Auto Shrink - specifica daca fi~ierele bazei de date sunt disponibile pentru
compactizarea periodica. Posibile valori sunt True ~i False. Pentru mai multii
informare, vezi proprietatea AutoShrink.
este • Auto Update Statistics - se indica daca baza de date automat modifica statisticile de
sunt optimizare dep~ite. Valorile posibile sunt True ~i False. in cazul valorii True, toate
statisticile dep~ite necesare pentru optimizarea interogarilor, sunt construite pe parcursul
Jaze optimizarii in mod automat. Pentru mai multa informare, vezi CREATE STATISTICS
(Transact-SQL).
l. • Auto Update Statistics Asynchronously - in cazul ill care este stabilitii valoarea True,
late: interogarile ce initiazii reinnoirea statisticilor invechite nu mai ~teaptii ca statisticile sa
fie reinnoite pana la compilare. Daca este fixatii valoarea False, interogarile ce initiaza
r ce reinnoirea statisticilor invechite vor a~tepta panii la momentul cand statisticele reinnoite
rver vor fi utilizate in planul de optimizare a interogarilor. Setarea acestei optiuni cu True nu
va avea nici un efect, dacii pentru Auto Update Statistics, de asemenea, nu va fi setatii
valoarea True.
Crearea # fntrefinerea bazei de date
New Datab<1se - Cl . .
Select a page
rf Script ... % Help
I- General
,, tr:";
I- Rlegroups (;_ollation: <default >
Qther options:
.•-- ,L\ I I
" Automatic
Auto Close False
.Auto Create Incremental Statistics False
Auto Create Statistics True
Auto Shrink False
.Auto Update Statistics True
Auto Update Statistics As)'rlchronousrr False
Connectian
I
.. Conlairlm!!l'll
Server: 1033
MV English
t~emf:<i T"Q9"!f1l En;st·ied Tnre
Connection :
T1·3:·1$fvnn ~k:~0 ·,\'---rds False
sa
Tw(', Di:;rt Year '....°JJtc:f-! 2049
Yf View connection oroperties
Oose Cursor on Commtt Enabled False
Default Cursor GLOBAL
" Database Scoped Configuations
Progress
Allow Snapshot Isolation
Ready
OK Cancel
Containment
Sectiunea data devine disponibila pentru editare numai in cazul in care bazele de date sunt de
tip izolat (Contained). Bazele de date izolate nu contin dependente de configuratie din SQL
Server ~i includ toate metadatele necesare direct in corpul sau. Aceasta proprietate permite
deplasarea u~oara a bazelor de date de la o instanta SQL Server la alta.
Database Scoped Configurapon - grup de optiuni aparut in versiunea 2016. Aceste optiuni
definesc modul de colectare a metadatelor necesare optimizatorului pentru construirea
planurilor de executie ~i procesarea tranzactiilor in mod dezirabil.
Cursor - un grup de optiuni care specifica la nivelul bazei de date unele comportamente ale
structurilor de cod T-SQL de tip Cursor.
• Close Cursor on Commit Enabled - specifica daca cursoarele se inchid dupa validarea
tranzactiei care a deschis a cursorul. Valorile posibile sunt True sau False. Daca se
indica valoarea True, orice cursor deschis este inchis, daca tranzactia este validata
(COMM!'!) sau tranzactia este desf'~urata inapoi (ROLLBACK). Daca este indicata
valoarea False, cursoarele raman deschise dupa validarea tranzactiei. in cazul cand
valoarea este False ~i tranzactia este desf'~urata inapoi, se lnchid toate cursoarele cu
exceptia celor definite cu clauzele INSENSITIVE sau STATIC.
• Default Cursor - specifica comportamentul implicit al cursorului. Daca se atribuie
valoarea True, valoarea implicita a cursorului este LOCAL. in caz contrar, este
GLOBAL.
Recovery - optiuni legate de recuperarea bazei de date in cazul unui accident sau opriri
nerujteptate a sistemului.
" Service Broker - proprietati ale serviciului Service Broker la nivel de bazli de date.
" State - statutul bazei de date pentru operatiuni DML ~i acces la baza de date.
"
• Database Read Only - specifica daca baza de date este numai pentru citire. Valorile
" posibile sunt True ~i False. Daca este setata valoarea True, utilizatorii pot doar citi
datele din baza de date. Utilizatorii nu pot modifica datele sau obiectele bazei de date.
ins~i baza de date poate fi ~tearsa utilizand instructiunea DROP DATABASE. Baza de
date nu poate fi in uz atunci cand este specificatli o valoare noua pentru optiunea
Database Read Only. Baza de date master este o exceptie, dar numai administratorul de
sistem poate utiliza aceasta baza in timpul cand se seteazli optiunea.
• Database State - vederea stlirii curente a bazei de date. Nu este editabila. Pentru mai
multli informare, vezi Database State.
• Encryption Enabled - daca este setata valoarea True, baza de date este activatli pentru
criptare. Pentru criptare este necesara o cheie de criptare.
• Restrict Access - specifica utilizatorii care pot accesa baza de date. Valorile posibile
sunt:
• Multiple - starea normala a bazei de date care permite multor utilizatori sa acceseze
baza de date in acelruji timp.
"
• Single - se utilizeaza pentru actiunile de mentinere a bazei ~i permite accesul la
aceasta numai unui singur utilizator lntr-un moment de timp.
• Restricted - pot utiliza baza de date numai membrii rolurilor db_owner, dbcreator
sau sysadmin.
Pentru schimbarea valorii optiunii respective, se face un click In coloana de valori, se alege
valoarea noua din meniul de context aparut sau executand un dublu click pe optiunea
respectiva.
te sunt de
din SQL Unele proprietati suplimentare ale bazelor de date pot fi setate numai cu limbajul Transact-
~ permite
SQL in cadrul instructiuniiALTER DATABASE.
actiilor,
n unele
-Cl-
Crearea # intrefinerea bazei de date
New Database
- ··--,.....,
~··-·
Select a page
.CT Script " Help
JI General
}I Options
> 'f~**''i\ Rows
FILE STREAM
Name FILESTREA... Read-Only Default
Connection
Server:
MV
.i\dd Rlegroup
Connection :
sa MEMORY OPTIMIZED DATA
Progress
Ready
Add Rlegroup
OK Cancel
11. Panelul Filestream este utilizat pentru gestiunea grupurilor de fWere ce contin obiecte
BLOB. Utilizarea tehnologiei Filestream dep~e~te lirnitele acestei lucrari.
12. Panelul de gestiune a grupurilor de fi§iere Memory Optimized Data - permite gestiunea
fi§ierelor asociate in SQL Server, adaugarea/excluderea fi§ierelor §i grupurilor de fi§iere din
baza de date §i modificarea atributelor bazei de date sau fi§ierelor ei.
Dupa ce toate optiunile bazei de date sunt definite, se apasa butonul OK
Se poate observa ca baza de date recent creata, deja, se contine in dosarul Databases.
lLJ • U"
i[;s MV (SQL Server 14.0.10C>0.1 69 - sa) MV (SQL Ser.-er 14.0.1000. 169- 5a)\D1
Databases
Name
•. System Databa ses
f Database Snaps hots Database Diagrams
+ iii .Adventure'l'iorkQOl7 Tables
•. iii u:.c=..::==.J Views
r+ Sec urity External Reso urces
Serier Objects Synonym s
>+ Replication Programmability
+ PnlvR~q·
13. Cu scopul de a obtine informatii statistice despre baza de date in uz se selecteaza baza de date
respectiva, se apasa butonul drept al mouse-ului ~i din meniul de context se alege Reports,
apoi se trece la Standard Reports ~i din lista aparuta se alege tipul raportului.
De exemplu, in imaginea de mai jos a fost ales tipul de raport Disk Usage. in rezultat, au
aparut date statistice despre utilizarea spatiului de disc alocat fi~ierelor ~i obiectelor bazei de
date.
Crearea si intrefinerea bazei de date
•¥_ _ _ _ _ _ _ _ _ --- - - - - - - - - -
No entry found for autogrowrllutoshnnk: event for uruveBrlatea database in the trace log.
Maintenance Pl an Wizard - L] . .
This wizard helps yc•u create a maintenance plan that SQ L Server f'.Qent
can run on a regular basis. With this wizard ;•ou can perform routine
database administration tasks such as:
• Check database integrfy
• Perform index maintenance
• Update database statistics
• Perform database backups
This wizard will create maintenance plans that can be edited in SQ L
Server Management Studio. Edit maintenance plans to add new tasks or
define workflow among the tasks .
!:J.elp Cancel
5. Textul afi~at in prima fereastra a asistentului de creare a planului de mentenanta este unul
introductiv ~i prezinta un rezumat al sarcinilor, care pot fi automatizate de plan. Pentru a
trece mai departe, se apasa butonul Next.
Crearea §i intre/inerea bazei de date
Name : MaintenancePlan_universttatea
Q.esaiption :
Schedule :
Occurs ever1 week on Sunday at 12:00:00 AM. Schedule will be used starting or Q-iange .
7. in urmatoarea fereastra, Select Maintenance Tasks, pot fi selectate una sau mai multe
sarcini ce trebuie executate de planul de intretinere. Selectand o sarcina sau alta, in campul
de jos al ferestrei, poate fi vizualizata descrierea acesteia. in cazul dat, a fost aleasa prima
sarcina din lista - Check Database Integrity. Apoi se apasa butonul Next.
r
Crearea # intre/inerea bazei de date
r-.r!O - - -· -
Maintenance Plan Wizard
Ij Select M11intemmce Tttsks
'lv'hich tasks should this plan perlonn 7
-!J The Check Database Integrity task perfonns internal consistency checks of the data and index pages
wrthin the database . fI
_t:] . .
Maintenance Plan Wizard
Select M11inten11nce Task Order
In which order should these tasks be perfom1ed?
.!,; The Check Database Integrity task perfonns uitemal consistency checks of the data and index pages
wrthin the database.
!::\elp Cancel
All databases
OK Cancel
,,;a
Select Report Options
Maintenance Plan Wizard
Select options for saving or distributing a report of the maintenance plan actions .
-Cl-
G2:j Write a report to a text fiie
D E-mail report
To·
:I
Help <Back Next> Cancel
0
Crearea §i fntrefinerea bazei de date
11 . in fereastra Complete the Wizard este prezentat sub forma de arbore un rezumat al operatiilor
care vor fi realizate de asistent. Pentru vizualizarea detaliilor, se expandeaza optiunea ce ne
intereseaza, apasand semnul plus respectiv. Pentru a termina procesul de proiectare a planului
de intretinere, se face un click pe butonul Finish.
12. in fereastra Maintenance Plan Wizard Progress are Joe procesarea sarcinii de creare a
planului de intretinere. in panelul Details se vizualizeaza lista de actiuni, statutul acestora ~i
mesajele in cazul aparitiei unui e~ec de procesare. Apasand butonul Report, se poate
vizualiza, salva sau expedia prin e-mail raportul de procesare a planului de intretinere. Daca
statutul pentru toate actiunile este Success, se apasa butonul Close.
5 Total 0 Error
Success 0 Warning
Qetails:
A.ct ion Status Message
.:;# Creating maintenance plan "Maintenance Plan_... Success
~ .A.dd1ng tasks to the maintenance plan Success
if> Adding scheduling options Success
:.jj/J Adding reporting options Success
..:;; Saving maintenance plan " MaintenancePlan_... Success
fie port
I
· - - -0- ose_ J
Crearea # intre/inerea bazei de date
atiilor 13. Acum, in SQL Server Management Studio, se poate verifica daca planul de intretinere a fost
ce ne creat. in dosarul Maintenance Plan, trebuie sa fie prezent un plan de mentenanta nou cu
anului numele respectiv.
Serviciul SQL Server Agent este responsabil de executare tuturor activitatilor SQL Server
programate sa ruleze in timp. De asemenea, ~i rulare planului de mentenanta programata, este dirijata de
acest servici special. Fiecare plan de mentenanta programat creeaza cate o inregistrare noua in lista Job -
urilor a Agentului. Acesta lista poate fi vazuta in arborele Object Explorer.
:are a 1. In Object Explorer se expandeaza instanta SQL (Serverul SQL) in cauza
ora ~i 2. Se expandeaza SQL Server Agent
po ate
3. Se expandeaza dosarul Jobs
Daca
•"'-'' Mam'enancePian_un vers tatea2 - sa 'DeS<gn" - Microsott SQL Server Manage'T'enr Studio
File Edit View Project Too l' Window Help
'? .
r -- ----- -- - --- - --- -- - - ---·
:Toolbox • 1/- XI MaintenancePlan_un ... tea2 - sa [D esign ]* ·tJ X Object Explorer O~tads
,P • cd Add Subplan liE' . lJ ,) , Manage Con nections ... • ~
.., Maintenance Pldn Ta:sks
Name MaintenanceF1an_universftatea2
~ Pointer
Description
fill Back Up Databaoe Ta;k
Ji Check Database lntegritf T.,k
Sub plan Description Schedule Run as
~ Execute SC.l Serm Agent Job Task Subplan_1 ......................! Subplan_ 1 Not scheduled {Qr, Demand} Jl SOL Server ftgent seivice account
GJ Execute T-SC.L Statement Ta>k
0..
t:j.' Hi;to1y Cle.nup Task Subptan Properties
4 Maintenance Cleanup Task
OK Cancel
• Al doilea buton din dreapta, ~ Subplan Properties, lanseaza cutia de dialog cu acel~i
nume. Selectand subplanul din tabelul de subplanuri de mai jos ~i apasand acest buton, se
pot insera numele, descrierea ~i se poate planifica un subplan in timp. Cutia de dialog
Subplan Properties poate fi vizualizata, aplicand un dublu click pe un subplan din tabel.
Crearea ~i intrefinerea bazei de date
• Butonul Manage Connections afi~eaza cutia de dialog respectiva. Aici pot fi gestionate
conexiunile utilizate in planul de intretinere. Se folose~te pentru adaugarea altor instante
ale SQL Server conectate la planul de intretinere in cauza. Fiecare sarcina de intretinere
din subplanul dat poate utiliza oricare din aceste conexiuni.
• Butonul ihl Reporting and Logging afi~eaza cutia de dialog cu acel~i nume, utilizata
pentru gestionarea rapoartelor de activitate cu privire la planul de intretinere ~i pentru
configurarea logurilor pe m~ina locala sau pe un server la distanta
6. Pentru a incepe crearea planului de intretinere, se gliseaza, din caseta Toolbox, pe suprafata de
proiectare, elementul necesar pentru a defini sarcinile ce trebuie executate.
7. Pentru configurarea optiunilor sarcinilor, se face un dublu-click pe sarcina respectiva ~i se
deschide o caseta de dialog. Tot aceea~i caseta de dialog apare dupa ce se da un click-drept pe
sarcina ~i din meniul de context aparut se alege optiunea Edit.
8. Pentru a defini fluxul intre sarcini, se face un click-drept pe oricare sarcina ~i in meniul de
context aparut se alege Add Precedence Constraint. In rezultat, apare o fereastra numita
Conrol Flow cu doua checkboxuri. in primul checkbox (From) se alege din lista sarcina care
trebuie executata prima. in al doilea checkbox (To), se alege din lista sarcina care trebuie sa fie
executata a doua. Consecutivitatea de actiuni aleasa apoi, se confirma, apasand butonul OK.
Acel~i lucru poate fi realizat, tragand sagetile de la o sarcina la alta cu ajutorul mouse-ului.
in figura de mai jos, este prezentat un plan de intretinere creat din trei sarcini. Prima sarcina
realizeaza controlul integritafii bazei de date (Check Database Integrity Task), apoi se
executa sarcina de compactare a bazei de date (Shrink Database Task) ~i dupa executarea
acestor sarcini, se executa operatiunea de notificare a operatorului (NotifY Operator Task).
in sarcina Check Database Integrity Task se specifica tipul de conexiune, numele ~i parola
utilizatorului ~i se selecteazii baza de date. in caz concret, a fost ales serverul local, tipul Mixt
de autentificare cu loginul sa ~i parola respectiva ~i a fost selectata baza de date calculatoare.
Pentru sarcina Shrink Database Task, in ce prive~te conexiunea ~i baza de date, setarile sunt
sirnilare cu cele din sarcina precedenta. Restul parametrilor specifici operatiunii de
comprimare a bazei de date au luat valorile implicite.
Daca, in procesul de validare, se determina ca o sarcina contine unele erori de configurare, in
partea dreapta a pictogramei, apare un semn ro~u - 0 . Dupa ce crearea planului este finisata,
se apasa butonul Save all de pe bara de instrumente.
--+ .
Check Database illtegri1y Task Shrink Database Task
Notify Operator Task
Q Check Database inlegrrty on Local serl'er ~
. Shrink Database on Local seM
!J• Databases MyFirs:DB Ci Database.s. MyFirstDB
Ir
~lotifr Operator on Loca! serve!
Operator: DBA Team
lndi.de indexes Limit 50 MB
Ph~sical orly Free spw; : 1~ '.~
Trebuie mentionat ca, pentru functionarea corecta a operatiunii NotifY Operator, este necesara
configurarea serviciului Database Mail ~i a Agentului SQL, ceea ce dep~e~te limitele
volumului dat In manual.
'ii
Maintenance Plans
,8 MaintenancePlan_universitatea
1J ELli'l:!.di:ua:.:~••~'S;.~r......!:.!:£;..'ii..
SQL Server Logs.
Database Mail
I
r·~ew ~vlaintenance Plan ...
9 Maintenance Plan Wizard
,m Distributed Transaction Coon
View Histo ry
:t Legacy
f: f Integration Services Catalogs Modify
I.+ ;;:ig SQL Seiver A.gent Execute
i:P El XEvent Profiler
Reports
Executarea, in afara programului, a Planului de mentenanfa poate fi realizata ~i din lista de Job-uri:
1. in Object Explorer, se expandeaza SQL Server Agent apoi
2. Se expandeaza dosarul Job.
3. Din lista de obiecte disponibile, se alege Job-ul necesai ~i se face click-drept pe el.
4. Din meniul de context, se alege Start Job at Step ...
8) syspolicy_purge_history
0"9 Job Activity Monitor
Start Job at Step ...
1f1 Alerts
Stop Job
ff.; Operator~
5. in cazul nostru, Job-ul are un singur pas (Step) ~i se lanseaza imediat o fereastra mica de
informare care ilustreaza progresul Job-ului.
Start Jobs - MV
2 Total G Error
2 Success {} Warning
Qetails :
.Action Status Message
.,<ifJ Start Job Maintenance Plan_univ .. Success
~ Execute ji:1b ·MaintenancePlan_u .. Success
C.lose
Crearea ~i intrefinerea bazei de date
Ca rezultat, apare interfata de Log File Viewer, unde poate fi analizat istoricul executarii
Planului de intre/inere respectiv.
Seledlogs
_, ~Job His!of'/
DMaintenance Plan
J Load Log ,j.J Export
.
l og File Viewer - MV
de
>
Stam
last Refresh
1/212018 11 :54:37 PM
End Progress Progress: 2!l18-01-02 23:&& :46.09 Source: Check Database Integrity Task Executing querl
Qose
intrebari de control:
1.Tipuri de fi~iere utilizate de Microsoft SQL Server 2017
2. Structura paginilor de pastrare a datelor.
3. Baze de date de sistem, importanta ~i rolul lor.
4. Principiile de creare a bazei de date In mediul SQL Server Management Studio.
5. Ce este un plan de mtretinere a bazei de date ~i care sunt tehnicile de creare a planului de
mtretinere?
Sarcini practice:
1. Creati o baza de date plasata fizic m mapa MyDocuments\Data, fixand o cre~tere a fi~ierului
primar a bazei de 16MB cu limita de cre~tere de 128 MB ~i a log-ului de 64 MB cu limita de
cre~tere de 1024 MB. Pentru fi~ierele secundare sa se defineasca un Filegroup nou implicit,
setand cre~terea fi~ierelor secundare de 64 MB cu limita de 1024 MB.
2. Creati o baza de date, unde fi~ierul log sa fie fizic plasat m mapa MyDocuments\Log, numele
fi~ierului log m mediul sistemului de operare trebuie sa se deosebeasca de eel logic definit m
schema fizica. Este important ca baza de date creata sa fie compatibila cu sistemul MS SQL
Server 2017 ~i ea sa fie accesibila numai unui singur uWizator lntr-un moment de timp.
3. Creati planul de mtretinere a bazei de date, construita m sarcina 1. Spatiul neutilizat de
fi~ierele bazei de date trebuie mdepartat atunci cand el atinge marimea 2000Mb. Spatiul
eliberat trebuie sa fie returnat sistemului de operare. Aceasta operatiune trebuie sa ruleze m
fiecare vineri, la ora 00:00. Raportul executarii planului de mtretinere trebuie salvat m docarul
MyDocuments\SQL_event_logs. lnitializati executarea planului. Dupa executare, verificati
rezultatele m fi~ierul log.
4. Creati planul de mtretinere a bazei de date, construite m exercitiul 2. Numele planului va fi:
,,Reconstruire index". in cadrul acestui plan, sistemul trebuie sa realizeze reconstruirea
indec~ilor numai asupra tabelelor de baza (exclusiv viziunilor) din toate schemele care exista
m baza de date m cauza. Spatiul liber pe pagina trebuie sa fie 10%. Sortarea indec~ilor trebuie
sa se realizeze m tempdb. Dupa reconstruire, trebuie sa urmeze colectarea statisticilor
complete despre indec~ii reconstruiti. Al treilea pas al planului trebuie sa constituie sarcina de
~tergere a istoriei despre operatiile de Backup-Restore ce au avut Joe pe SQL Server. Trebuie
~ters istoricul care este mai vechi de 6 saptamani. Acest plan trebuie sa fie executat In fiecare
prima duminica a lunii. Creati dosarul MyDocuments\SQL_reports. Raportul de executare a
planului trebuie sa fie adaugat m acest fi~ier. Procesul de mentenanta - sa fie logat m mod
extended. lnitializati executarea planului. Dupa executare, verificati rezultatele m fi~ierul log
generat.
Crearea # modificarea tabelelor in SQL Server Management Studio
3. 1. Tipuri de date
Precum s-a mentionat anterior, tot campul (coloana) unui tabel trebuie sa respecte tipul de date specificat
pentru acest camp. Aceasta specificare se face la crearea tabelului. Sistemul SQL Server aduce cu sine o
multime larga de tipuri de date. Cu toate acestea, in operatiile specifice, utilizatorul poate crea propriile
tipuri de date. in continuare, este prezentata o lista de tipuri de date pe care le sustine SGBD-ul SQL
Server 2017 [16] .
TINYINT
Piistreaza valori cuprinse intre 0 ~i 255. Ocupa 1 octet.
BIT
Un intreg cu valoarea 1 sau 0. Se folose~te pentru a reprezenta True sau False, sau Yes sau No.
DECIMAL(P[,S]) sau NUMERIC(P[,S])
Pentru pastrarea numerelor zecimale exacte. Parametrul P indica numiirul total de cifre pe care
cfunpul poate sa le contina. Parametrul S indica numarul de cifre dupa punctul zecimal. in SQL
Server, tipul NUMERIC este un sinonim pentru tipul de date DECIMAL. in cazul in care este utilizata
precizia maxima, valoarea valida este cuprinsa intre -1 038 + 1 ~i 1038 - I .
MONEY
Pastreaza valori de la -922.337.203.685.477,5808 la +922.337.203.685.477,5807. Ocupa 8 octeti.
SMALLMONEY
Piistreaza valori de la -214.748,3648 la 214.748,3647 ~i ocupa 4 octeti.
IMAGE
Pentru date binare mai mari de 8 Ko, dar care nu depa~esc valoarea 2 31-1 octeti. Este utilizat pentru
pastrarea documentelor Word, tabelelor electronice Excel, imagini (fWere bitmap, GIF ~i JPEG)
DATE
Pastreaza date alfanumerice, care reprezinta data cuprinsa intre 01/0110001 ~i 31112/9999 inclusiv.
Ocupa 3 octeti memorie. Precizie - o zi.
In
4, TIME
8 Pastreaza date alfanumerice, care reprezinta timpul. Cuprinde valori intre 00:00:00.0000000 ~i
23:59:59.9999999, inclusiv. Precizia p8.rtii fractionare poate varia intre valorile 0 ~i 7. Precizia
implicita a p8.rtii fractionare este 7 ~i ocupa 5 octeti memorie. Precizia maximala e 100 nanosecunde.
DATETIMEOFFSET
Pastreaza date alfanumerice, care, in afara de luna, an ~i data, mai reprezinta ~i ora in formatul 1-24.
Ora se racordeaza conform fusului orar setat pe calculator. Reprezinta data intre 01101/1753 ~i
31/12/9999, inclusiv timpul intre 00:00:00 ~i 23:59:59.9999999, inclusiv. Ocupa 10 octeti de memorie
cu valoarea irnplicita a p8.rtii fractionare de 100 nanosecunde precizie.
SMALLDATETIME
Pastreaza date alfanumerice, care reprezinta data ~i timpul de la 11111900 la 6/6/2079. Ocupa 4 octeti
de memorie. Precizie 1 minut.
de
3.1. 6. Tipuri de date speciale
CURSOR
lu, Un tip de date pentru variabile ~i parametrii de ie~ire ai procedurii stocate care contine referinta la un
cursor. Orice variabila creata cu tipul de date cursor poate lua valoarea NULL.
HIERARCHYID
Este un tip de date de sistem cu lungime variabila. Se utilizeaza pentru crearea tabelelor cu structura
ierarhica sau pentru referinta la date cu structura ierarhica. Valorile de tip HIERARCHYID reprezinta
pozitiile intr-o ierarhie.
SQL_VARIANT
Un tip de date care stocheaza valori ale diferitelor tipuri de date suportate de SQL Server. Lungimea
. de maximala a datelor este de pana la 8000 octeti.
Tipul SQL _VARIANT poate fi utilizat pentru coloane, parametri, variabile valori returnate de functiile
definite de utilizatori. Tipul SQL _ VARIANT permite acestor obiecte ale bazei de date sa sustina valori
ale altor tipuri de date.
Crearea # modijicarea tabelelor in SQL Server Management Studio
0 coloana de tipul SQL_ VARIANT poate contine randuri de diferite tipuri. De exemplu, o coloana
definita SQL _ VARIANT poate contine valori de tipul INT, BINARY ~i CHAR.
Mai jos este prezentata lista de tipuri de date care nu pot fi stocate folosind SQL VARIANT [52],
VARCHAR(MAX), VARBINARY(MAX) , NVARCHAR(MAX) , XML, TEXT, NTEXT, IMAGE,
GEOGRAPHY, HIERARCHYID, GEOMETRY, tipuri de date definite de utilizator,
DATETIMEOFFSET ~i SQL_ VARIANT.
TABLE
Este un tip de date special, care poate fi utilizat pentru stocarea unui rezultat pentru tratarea ulterioara.
Tipul TABLE este, in primul rand, utilizat pentru pastrarea unei multimi de randuri obtinute in calitate
de rezultat al unei functii cu valoarea unui tabel.
TIMES TAMP
Reprezinta un identificator unic pentru toata baza de date ~i constituie un numiir binar de 8Ko. Se
utilizeaza in calitate de mecanism de marcare a versiunii unui rand din tabel, care se
autoincrementeaza de fiecare data cand se actualizeazii un rand. Tipul TIMESTAMP este un sinonirn
pentru ROWVERSION.
UNIQUE IDENTIFIER
Un identificator unic global (GUID) care reprezinta un numiir de 16 biti. Se folose~te cand o linie
trebuie sa fie unica intre multe alte linii.
XML
Este tipul de date ce pastreaza date XML. Instantele XML pot fi pastrate mtr-o coloana sau mtr-o
variabila de tipul XML
3. 1. 7. Date UNICODE
Traditional, tipurile de date UNICODE in SQL Server permit folosirea datelor, care sunt definite de
un anumit set de caractere. Un set de caractere este ales 1n timpul instalarii sistemului SQL Server ~i
ramane neschimbat pe toata durata de functionare a software-ului instalat. Folosind tipurile de date
UNICODE, o coloana poate stoca toate caracterele care sunt definite in diferite seturi de caractere.
Tipurile de date UNICODE ocupa de doua ori mai mult spatiu de stocare decat tipurile de date non-
UNICODE. Datele UNICODE utilizeazii setul de caractere UNICODE UCS-2.
NCHAR(N)
Secventa de caractere UNICODE de lungime fixa (pana la 4000 de caractere).
NVARCHAR [ ( N I MAX ) ]
Secventa de caractere UNICODE de lungime variabila (pana la 4000 de caractere).
MAX indica faptul ca marimea maxima de memorie utilizata este 2 31 -1 octeti (2 Go). Dimensiunea de
depozitare, 1n octeti, este de doua ori lungimea efectiva a datelor introduse + 2 octeti.
NT EXT
Secventa de caractere UNICODE de lungime variabilii, care nu dep~e~te valoarea 2 30 .
Tipurile de date NTEXT, TEXT ~i IMAGE vor fi eliminate in versiune viitoare a Microsoft SQL
Server. Microsoft nu recomanda utilizarea acestor tipuri de date pentru dezvoltarea proiectelor noi. In
schimb, este recomandata planificarea modificarilor aplicatiilor care folosesc tipuri de date
mentionate cu tipuri de date noi-NVARCHAR (MAX), VARCHAR (MAX), ~i VARBINARY (MAX).
Atunci cand doua expresii au tipuri de date cu diferite colatiuni, precizii, scale sau lungimi ~i sunt
imbinate de un operator, caracteristicile rezultatului sunt determinate, precum urmeaza:
r52}, • Tipul de date al rezultatului este determinat tinand cont de regulile de precedenta a tipurilor de
/GE, date din expresii. SQL Server 2017 utilizeaza ordinea de precedenta pentru tipurile de date,
ator, precum urmeaza:
intr-o . • Precizia, scara ~i lungimea rezultatului depinde de precizia, scara ~i lungimea expresiilor de
intrare.
NOT NULL
Specifica faptul ca un camp nu poate avea valori necunoscute, NULL.
UNIQUE
1unea de
Determina comportamentul campurilor care nu fac parte din cheia primara. Constrangerea UNIQ UE
asigura faptul ca valorile duplicate nu vor fi introduse pentru campurile specificate. Cu toate
acestea, campurile specificate pot accepta valori nule, iar sistemul creeaza automat din ele un index
pentru facilitarea cautarii in tabele.
PRIMARY KEY
oft SQL
r noi. in Cheie primara reprezinta un camp sau o multi.me de campuri care identifica, in mod univoc,
de date inregistrarile unui tabel. Cu alte cuvinte, campul, care este cheie primara, nu poate sa contina valori
&IT). duplicate.
Un tabel poate avea doar o singura cheie primara, iar campurile care au fost selectate in calitate de
cfunpuri ale cheii primare nu pot contine valori necunoscute. Celelalte chei, pe care le poate avea un
cte tipul tabel, se numesc secundare ~i ele se folosesc pentru facilitarea accesului la date.
e pentru FOREIGN KEY
Cheie externa este un camp sau o multime de campuri ce corespund cheii primare a altui tabel.
Cheia primara se utilizeaza pentru a defini legaturile dintre tabele.
Crearea ~i modijicarea tabelelor in SQL Server Ma11agement Studio
De exemplu, fie ca un tabel, care contine date despre cumparaturi, poate avea in calitate de camp
codul furnizorului de la care a fost cumpiirata marfa. Campul CodJurnizor, unul din campurile
altui tabel, care contine date despre vanzatori, va fi cheie primara. Evident ca CodJurnizor, din
primul tabel, va fi cheie extema pentru tabelul al doilea. Trebuie mentionat cii, la inserarea unui noi
inregistriiri in tabelul de cumpiiraturi, valoarea campului, care este cheie extema, trebuie sa existe in
tabelul al doilea, cu care acesta este legat (prin relatia m:l).
CHECK
Limiteazii valorile care pot fi luate de un camp (sau mai multe campuri). in cazul actualiziirii bazei
de date, sistemul testeaza constrangerea booleana care urmeaza dupa cuvantul rezervat CHECK.
Daca constrangerea redata de expresia logica ia valoarea adevarat, actualizarea este acceptatii. De
exemplu, se poate defini o constrangere a domeniului de valori ale campului Salariu, stabilind
salariul functionarilor intre valorile 136 ~i 10000:
Salariu >= 136,00 AND Salariu <=10000
n pentru
acultatii
!Supra • Column name: in acest camp, se scrie numele coloanei (denumirea atributului). Numele este
format din litere, cifre, semnul sublinierea U, semnul aron (@) sau diez (#), dar trebuie sa
'es.
inceapa cu o litera (se permite, de asemenea, ~i aplicarea altar simboluri, dar utilizarea lor este
recomandata pentru cazuri specifice).
ila) a • Data Type: Tipul de date, pe care le poate pastra coloana, sunt cele permise de SGBD-ul SQL
Server (vezi tabelele din compartimentul respectiv).
• Allow Nulls: 0 coloana poate fi definita sa accepte sau sa nu accepte valoarea speciala NULL.
Se marcheaza cu o apostila patratul respectiv din campul Allow Nulls, daca coloana accepta
valori nule. Sau se demarcheaza, daca utilizatorul trebuie neaparat sa insereze valori pentru
aceasta coloana.
Crearea # modificarea tabelelor in SQL Server Management Studio
Specificapi generale:
• Name: Identifica proprietati descrise in sectiunea anterioara (Column name).
• Allow Nulls: Identifica proprietati descrise in sectiunea anterioara.
• Data Type: Identifica proprietati descrise in sectiunea anterioara.
• Default Value or Binding: Daca are loc inserarea in baza de date ~i la inserare nu se specifica
valoarea pentru coloana, atunci se introduce valoarea acestei proprietati, adica valoarea
predeterminata (implicita). in cazul cand nu este defmita o valoare predeterminata, aceasta va fi
NULL. Nuse poate defini o valoare predeterminata pentru coloanele de tip TIMESTAMP sau de
identitate. Valoarea campului cu proprietati Default Value or Binding poate fi sau valoarea
implicita a unei constrangeri SQL Server sau numele unei constrangeri globale legata de
coloana respectiva. Crearea constrangerilor implicite pentru coloane poate fi realizata ~i direct
prin tiparirea respectivului text.
• Length: Indica lungimea tipului de date. La selectarea tipului de date, SQL Server introduce o
lungime predefmita pentru acest tip. Aceasta lungime poate fi modificata numai pentru tipurile
de date BINARY, CHAR, NCHAR, VARBINARY, VARCHAR sau NVARCHAR (consultati
tabelele respective pentru a vedea semnificatia concreta a lungimii fiecarui tip de date).
• Precision: SQL Server perrnite definirea preciziei unei coloane numai pentru tipurile DECIMAL
~i NUMERIC. Precizia unei coloane numerice este numarul maxim de cifre folosite pentru acest
tip de date. Precizia pentru o coloana nenumerica se refera, in general, la lungimea maxima sau
la lungimea defmita a coloanei.
• Scale: Se poate schimba scala pentru coloanele NUMERIC ~i DECIMAL, daca se dore~te sa se
redefmeasca numarul de cifre care poate sa apara in dreapta punctului zecimal. Scala unei
coloane NUMERIC sau DECIMAL este numarul maxim de cifre de dupa punctul zecimal.
Atunci cand se selecteaza un tip de date, scala coloanei este implicit setata la 0. Pentru coloanele
cu numere in virgula flotanta, scala este nedefmita, pentru ca numarul de cifre din dreapta
punctului zecimal nu este fix.
Urmatoare sectiune Table Designer contine mai multe optiuni. Mai jos sunt descrise doar cateva
mai des utilizate:
• Collation: Afi~eaza secventa de colatiune pe care SQL Server o aplica implicit asupra coloanei
de fiecare data cand valorile coloanei sunt utilizate pentru sortarea rezultatului interogarii.
Pentru editarea colatiunii, se selecteaza proprietatea, se aplica un click pe butonul d ce apare
in dreapta valorii proprietatii pentru a deschide caseta de dialog Collation.
• Computed Column Specification: Afi~eaza informatii despre coloana calculata. Valoarea
aratata pentru proprietate este acee~i ca ~i valoarea proprietatii Formula ~i afi~eaza formula
pentru coloana calculata. Astfel, pentru modificarea valorii proprietatii Computed Column
Specification, aceasta se expandeaza ~i se editeaza proprietatea Formula.
• Formula: in cazul in care coloana este o coloana calculata, aici trebuie sa se introduca
formula ei. Coloanele calculate sunt proprii Analysis Services, o componenta a SGBD-ului
SQL Server, care nu va fi examinata in acest capitol.
• Is Persisted: Indica daca rezultatele formulei sunt stocate. Daca aceasta proprietate este
setata cu valoarea No, atunci numai formula este stocata, iar valorile sunt calculate de
fiecare data cand se face referinta la aceasta coloana. Pentru editarea acestei proprietati, se
face un click pe valoarea acesteia, se expandeaza lista drop-down ~i se selecteaza alta
valoare.
Crearea li modiflcarea tabelelor in SQL Server Management Studio
• Identity Specifcation: Indica faptul ca cfunpul este autonumeric. Adicii, SQL Server atribuie, in
mod automat, o valoare unica acestei coloane de fiecare data cand se produce inserarea. Coloana
ul inferior
e tipul de nu poate contine valori nule ~i, in mod automat, optiunea Allow Nulls va fl demarcata. Aceasta
proprietate este disponibilii numai pentru tipurile numerice lntregi, de exemplu, INT.
• Is Identity: Indicii dacii coloana este sau nu o coloana autonumerica.
• Identity Seed: Reprezinta valoarea initiala a unei coloane cu proprietatea Identy.
• Identity Increment: Reprezinta cre~terea valorii coloanei cu proprietatea Identy dupa
fiecare inserare.
Folosind cele prezentate panii aici, se poate trece la construirea structurii tabelului (schemei relatiei)
grupe. La sf'ar~itul procesului, structura poate ariita precum cea din fereastra ce urmeazii:
specificii
valoarea
asta va fi
MP sau de
valoarea MV.universitate:a - dbo.grupe* -P X
egata de Column Name Data Type Allow Null s
~i direct
~ ld_Grupa
: ... ..J small int D
troduce o Cod_Grupa char{5) D
ru tipurile
consultati S.pecialitate va re ha r(2.55) ~
Nume:_Facultate varchar(255) ~
JECIMAL
ntru acest D
IXimii sau
· e~te
sii se
cala unei 3.3.5. Stabilirea cheii primare
zecimal. Pentru stabilirea cheii primare, este suficientii selectarea (in panelul superior al filei de proiectare a
coloanele
tabelelor) coloanei anterioare celei Column Name ~i apoi aplicarea unui click pe butonul Set Primary
n dreapta
Key, "°, de pe bara de instrumente. in stanga coloanei selectate, apare o iconitii ill formii de chei¢,
simbolizand cii aceasta coloanii este cheia primarii a tabelului.
:rr cateva in cazul cand cheia primara este compusii (are mai mult de o coloana), procesul urmat este acela~i
ca ~i pentru cheia primara simplii. Aici, pentru selectarea mai multor coloane, atunci cand se aplicii
coloanei clickurile pe cfunpurile din stanga coloanei Column Name, se tine apasata tasta Ctrl.
ii. in cazul nostru, cfunpul Id_ Grupa este cheie primarii pentru tabelul grupe. in prima figurii, ce
ce apare urmeazii, sunt incercuite cu ro~u coloana ce preceda coloana Column Name (pe care se face un click) ~i
butonul Set Primary Key, Dupii finalizarea acestui proces, cfunpul Id_ Grupa va riimane cu cheia
pozitionatii in partea sa stangii, precum e ariitat in figura a doua ce urmeazii:
Valoarea
formula
Column
ntroduca
fBD-ului
tate este
ulate de
ietiifi, se
:aza altii
Crearea # modijicarea tabelelor in SQL Server Management Studio
Daca se dore~te ~tergerea tabelelor care sunt legate cu constrangeri de tipul Foreign Key, Unique
sau Primary Key, trebuie sa se ~tearga, mai intai, tabelele cu constrangeri Foreign Key. Daca se dore~te
~tergerea tabelului care este referit intr-o constrangere Foreign Key, dar nu se dore~te ~tergerea intregului
tabel cu cheie straina, trebuie sa se ~tearga constrangerea Foreign Key.
Pentru ~tergerea completa a unui tabel din baza de date, se procedeaza in modul urmator:
1. in baza de date unde a fast creat tabelul, se selecteaza (cu un click) dosarul Tables. Se observa
ca tabelul cautat va apiirea in partea dreapta, in lista de obiecte de pe fila Object Explorer
Details.
2. Se face un click cu butonul drept al mouse-ului pe tabelul care trebuie suprimat.
3. in meniul de context care se deschide, se selecteaza opfiunea Delete. in consecintii, pe ecranul
calculatorului, va fi expusa o fereastra care ofera o scurta informatie despre obiectul preconizat
pentru ~tergere (numele obiectului, tipul, proprietarul, statutul, mesajele). Tot in aceasta
fereastrii, apiisand butonul Show Dependencies, pot fi vizualizate dependentele logice ale
obiectului dat cu alte obiecte ~i structuri din schema globala a bazei de date.
4. Seda un click pe butonul OK al ferestrei Delete Object, dupa care tabelul respectiv va fi ~ters
din baza de date.
- li6 LOCALDEV01 (':.QL ':.erver 14.0. 10::>C" 169 • CIB171 Cibernetica Informatica ...
Databases lr~F171 Informatica Informatica ...
't; System Databases Tl171 Tehnologii Info ... Informatica ...
t Database Snapshots
NULL NULL NULL
+ Iii Adventun:WorkQ017
. : , Iii universitatea
,:; Databa:,e Diagrams
uarea
Tablt:s
us in f+ i System Tables
hoose + FileTables
'+' External Tables
'+ Graph Tables
+ ml dbo.grupe
\fiPlMC
intrebari de control:
insa, I. Ce proprietati obligatorii trebuie sa posede o coloana?
2. Care sunt tipurile de date utilizate de sistemul SQL Server?
3. Ce constrangeri de integritate utilizeaza SQL Server pentru mentinerea consistentei bazei de
date?
~ sau 4. Ce dificultati ~i urmari pot aparea in procesul de ~tergere a campurilor din tabelele, deja,
ll este existente?
s. Ce dificultati ~i urmari pot aparea in procesul de modificare a campurilor din tabelele, deja,
~eptie existente? Care campuri nu pot fi modificate?
nu se
'LL. Sarcini practice:
CES.
1. Care din numerele prezentate mai jos pot fi introduse intr-un camp de tipul DECIMAL(4, 1)?
1gimii
a) 16,2; b) 116,2; c) 16,21; d) 1116,2; e) 1116,21.
gimii, 2. Fie [Coll] din tabelul de mai jos este de tip INT, ~i [Col2] este de tip DECIMAL (2.1)
Il
as
[2
co
as
lnstruc/iunea SELECT Transact-SQL
.,
L~i' Object Explorer Details - Microsoft SOL Server Management Studio
File Edit View Debug
ra . -"
Object Explorer
Databases Connect...
Policy Health State
Security Di>eonnect
Ser·:er Objects
:+ Replication
PolyBase
+ Always On High Availabil
Management
+ Integration Serv ices Catal I Availability Connect ..
• zi:g SQL Server Agent Stop Disconnect
+ El XEvent Profiler ices Catalo ...
Pause
1t
Restart
Activity Monitor
Policies
Dupa ce se apasa New Query apare pagina in care se va lucra. Spatiul de lucru (in dreapta) este
destinat scrierii instructiunilor SQL. in plus, exista o fereastra paralela cu prima, in care se afi~eaza
rezultatul interogarii sau mesajele de erori. Fereastra se deschide automat odata cu executarea interogarii.
InstrucJiunea SELECT Transact-SQL
0 . fd' .. '* Ii ylil lo'§! ~ ew Qu er1 wl§J .:'{,) ,r;:;i ,",.f. ti.?J ~ o'1 - ~
'•'i univer5-itatea ~ E)l;ecute Qebug
Connect~
:::.:
1: Database>
System Databa ses
·:P Database Snapshots
±, iii AdventureWo rks2017
2 4 5 6 7 3
+ iiiuniversitatea
.., Secu rity
1+ Server Objects
1+ Replication
PolyBase
,.,, Alw ays On High Ava ilabilit
.+ Management
'.• Integrati on Services Catala
12J o/o •
f;:, Connected. (l/1) MV (1 4.0 RTM] sa (53) univer.itatea 00:00:00 0 rows
in cazul in care rezultatul se cere sa fie afi~at sub forma de grid sau sub alta forma, se aplica un
click pe butonul respectiv de pe bara de instrumente (3) Results to grid sau text, saufile. Unul din cele
mai mari avantaje ale utilizarii opfiunii grid consta in faptul ca coloanele pot fi ajustate la necesitatile
practice. Dimensiunea celulelor-grid pot fi modificate asemenea celulelor Excel, de exemplu.
Apasand butonul (4) Cancel Executing Query, serverului i se trimite o cerere de anulare a
interogarii. Unele interogari nu pot fi anulate imediat, ci trebuie ~teptata o stare potrivita de anulare. Fi ind
anulata, o retardare apare datorita procesului de des~urare (rollback) a tranzactiilor.
Butonul numerotat in imaginea de mai sus cu cifra (5), numit Display Estimated Execution Plan,
are functia de a solicita, de la procesorul de interogari, un plan de executare a interogarii, fara ca realmente
aceasta sa fie executata, iar planul sa fie afi~at in fereastra Execution plan . Acest plan utilizeaza
statisticile pentru estimarea numarului de randuri ~teptate care vor fi returnate pe parcursul fiecarei pfu1i
de executare a interogarii. Planul real de executare poate fi diferit de planul estimat de executare, dacli
numarul de randuri returnate se deosebe~te esential de eel evaluat ~i procesorul de interogari a modificat
planul pentru a-1 face mai eficient
Fie ca se scrie o instructiune asupra unui tabel din baza de date ~i fie ca s-a aplicat un click pe
butonul in chestiune, Display Estimated Execution Plan. Sa se observe graficul pe care 1-a generat
interogarea.
Interogarea cere de la sistem sa fie selectate cfunpurile Disciplina ~i Nr_ore_plan_disciplina ale
tabelului discipline din inregistrarile in care numarul de ore planificate este 60, ~i cere ca inregistrarile
lnstrucfiunea SELECT Transact-SQL
rezultatului sa fie prezentate in ordinea (ascendenta) campului Disciplina. Dupa scrierea acestei
instrucpuni, se face un click pe butonul (5), dupii care se obtine rezultatul ce urmeazii:
fi
a
.J SQLQuery1.sql - LOCALDEV01.universitatea {sa (61 ))" - Microsoft SQL Server Management Studio
Eih: £dit 'i[iew .Query P.roject Qebug Iools Wi ndow tlelp
SQLQuery1 .sql - LOC. .. versitatea (sa (61))" -J;; X Object Explorer Details
-SELECT Discipli na , Nr_ore_p la n_disciplin a FROM discipline
vJHERE Nr _o re_pla n_discipl ina "' 60 ORDER BY Disciplina ASC ;I
-- Sort
Cost: 79 %
Table Sca:i
[di sc:ipline]
Cost: 22 it
In afara de aceasta analiza grafica, pot fi obtinute date despre orice etapa a interogarii. Cu acest
scop, este suficienta pozitionarea cursorului mouse-ului asupra oricarei iconite a prezentarii grafice a
interogarii ~i imediat este expusa o fereastra asemanatoare celei ce urmeazii:
Table Scan
Sort
[d::.sc:ipline
Cost: 78 % ~~ %
SELECT
Pentru a evalua costul real al interogarii executate, se apasii butonul (6), Include Actual Execution
Plan. Este executata interogarea, sunt obtinute rezultatele interogarii ~i planul de executie a interogarii, in
forma grafica in fila Execution plan.
Instrucfiunea SELECT Transact-SQL
Butonul Include Live Query statistics (7) ofera utilizatorului posibilitatea de a urmiiri progresul
planului de executie al unei interogiiri in timp real. Se poate observa modificarea statisticilor de resurse, ~i
nu inregistriirile procesate la nivelul fieciirui nod al planului de executie. Este o metoda utila de depanare a
problemelor de performanta, in special la interogiiri costisitoare [31].
Daca este necesar, interogarea poate fi salvatii, apoi recuperata, folosind optiunile cunoscute Save ~i
Open pentru fi~iere, care sunt prezente in majoritatea componentelor sistemului Windows.
1entru
Operatori la nivel de bifi Reprezentare
lor ~i
Operatorul AND pe hip &
Operatorul NOTpe hip
ti lor Operatorul OR pe biti
rrsele Operatorul exclusive OR pe biti /\
Se remarca trei sectiuni importante ale constructiei de interogare: clauza SELECT, clauza FROM ~i
clauza WHERE:
• Clauza SELECT este obligatorie. Se utilizeaza pentru a specifica numele coloanelor ( campurile)
ce vor fl afi~ate in rezultatul interogarii.
• <lista coloane> cuprinde campurile care trebuie sa apara in tabelul sau tabelele cu rezultatele
interogarii.
• ALL cere includerea tuturor inregistrarilor care indeplinesc conditiile impuse. Instructiunile
SELECT <listii coloane> ... ~i SELECT ALL <listii coloane> ... au acela~i rezultat practic,
calificativul ALL este rar folosit.
• DISTINCT cere eliminarea inregistrarilor care contin duplicate in campurile selectate, afi~and
numai o aparitie a acesteia.
• Clauza FROM este, de asemenea, obligatorie. FROM se utilizeaza pentru a specifica tabelele
din care vor ft extrase co Joane le specificate in clauza SELECT.
• <Lista tabele> reprezinta lista tabelelor de unde datele trebuie sa fie selectate.
• WHERE - clauza opfionala utilizata in filtrarea inregistrarilor returnate de clauza FROM.
WHERE este precedat de o expresie numita conditie de cautare.
• <condi/ie cautare> - define~te un filtru pentru interogare, folosind clauza WHERE.
Clauza SELECT introduce lista coloanelor sau al expresiilor care vor ft selectate ~i afi~ate. in cazul
in care se cere selectarea mai multor campuri, acestea se separa prin virgula.
Sa se revina la urmatoarea instructiune (sectiunea 4.2.) ~i sa se tipareasca in Transact-SQL Query
Editor. Apoi sa se execute instructiunea in modul acceptat (sub forma de lista sau grid) ~i apoi sa se
execute Display Estimated Execution Plan:
ml Results ~ Messages
Id _Disciplina Disciplina Nr_ore _plan_disciplina
100 Sisteme de operare 5{}
Clauza WHERE restrictioneaza liniile returnate ca rezultat la acele linii care indeplinesc conditia
introdusa de aceasta clauza. in forma cea mai obi~nuita, clauza WHERE este urmata de o conditie, data ca
o expresie booleană. Se pot combina două sau mai multe condiții folosind operatorii logici OR și AND. De
aceea, e lesne de observat faptul că există o mulțime de combinații care pot fi realizate. Spre exemplu, se
examinează o altă instrucțiune:
Se selectează toate câmpurile tabelului discipline, pentru care (WHERE) numărul de ore planificate
pentru o disciplina (Nr_ore_plan_disciplina) este egală cu 80 și (AND) identificatorul disciplinei
(Id_disciplina) este mai mare de 110. Astfel, este formulată interogarea care îndeplinește condiția din
clauza WHERE.
Uneori nu se cunosc valorile exacte pe care le căutăm. Utilizând operatorul LIKE este posibil să
selectam rândurile care se potrivesc cu un model specificat de caractere.
În următorul exemplu, este formulată o interogare care cere ca înregistrările să fie reprezentate sub
formă de grid, cu câmpurile Id_Disciplina, Disciplina, unde câmpul Disciplina începe cu litera (simbolul)
'S' și rezultatul să fie ordonat pe câmpul Id_Disciplina în ordine descendentă.
După cum se poate observa, clauza LIKE testează dacă valoarea parțială a unui șir de caractere
coincide cu un șablon definit de utilizator. Această clauza face uz de caracterul procent (%) în calitate de
șablon, care denotă o secvență de lungime arbitrară de caractere ce pornește din această poziție.
Clauza ORDER BY introduce numele câmpului, după care se face ordonarea liniilor rezultate.
Ordonarea este, implicit, în ordine crescătoare. Dacă numele câmpului este urmat de cuvântul DESC,
ordonarea liniilor se face în ordine descrescătoare a valorilor acelui câmp.
95
Acestea folosesc următoarea sintaxă:
În exemplul de mai jos, sortarea este executată, de asemenea, în mod crescător, după câmpul
Nr_ore_plan_disciplina. În setul de rezultate sunt 9 linii și nu 3. Cu ajutorul opțiunii WITH TIES mai
multe discipline care au același numărul de ore ca și cele TOP(3) au fost incluse în rezultat [56].
96
4.4. Interogări cu joncțiuni și funcții
Cea mai folosită instrucțiune SQL pentru obținerea informațiilor din mai multe tabele relaționate
este JOIN, sau joncțiunea. Instrucțiunile JOIN pot fi interne sau externe.
Deseori, pentru a obține un rezultat complet, este necesară selectarea datelor din două sau mai multe
tabele. De obicei, tabelele din baza de date sunt legate între ele prin chei. Este important, îndeosebi, rolul
cheii primare care face ca coloanele ce o constituie să posede o valoare unică pentru fiecare rând.
De exemplu, este necesar să se afișeze lista profesorilor și identificatorii disciplinelor care se predau
la grupa Id_Grupa = 1. Câmpul Nume_Profesor se află în tabelul profesori. Identificatorii disciplinelor și
grupelor asociate profesorilor se află în tabelul studenti_reusita.
95
Instrucțiunea SELECT cu INNER JOIN are următoarea formă generală:
96
tupluri în tabelul studenti_reusita, care nu coincid pe câmpurile de joncțiune din tabelul profesori, acestea
sunt, de asemenea, afișate. Coloanele tabelului din stânga se completează cu valori nule.
95
profesorului se începe cu litera 'M', respectiv. Coloanele din noul tabel sunt coloanele Disciplina,
Nume_Profesor și Prenume_Profesor din toate cele două tabelele.
Restricțiile în clauza WHERE sunt adăugate doar pentru a reduce setul de date rezultant, că el să fie
mai citibil din imagine. Instrucțiunea de mai sus este echivalentă cu instrucțiunea:
SELECT d.Disciplina,
p.Nume_Profesor,
p.Prenume_Profesor
FROM discipline d, profesori p
WHERE d.Disciplina LIKE 'Practica%'
AND p.Prenume_Profesor LIKE 'M%' ORDER BY p.Nume_Profesor;
Produsul Cartezian a două tabele asociază fiecare rând din primul tabel cu toate rândurile din tabelul
al doilea. Rezultatul păstrează toate rândurile tuturor tabelelor joncțiunea, obținând toate combinațiile
posibile ale acestora. Desigur, dacă nu există duplicate în tabelele originale, toate rândurile din rezultat vor
fi, de asemenea, unice.
Un produs Cartezian are tendința de a genera un număr mare de rânduri, iar rezultatul, de regulă, rar
este util. Acesta poate parveni accidental în cazul nespecificării criteriilor de joncțiunea, în particular,
atunci când se utilizează sintaxa SQL89. Prin urmare, deseori, trebuie să fie prezentă o condiție de
valabilitate a joncțiunii, fapt ce transformă produsul Cartezian într-un alt tip de joncțiune.
Excepție fac doar cazurile în care este nevoie de combinarea tuturor rândurilor din toate tabelele.
Produsul Cartezian poate fi folosit, de asemenea, pentru executarea unor teste în cazul în care este
necesară generarea unui număr mare de rânduri pentru simularea unui număr rezonabil de date.
96
O funcție este constituită dintr-o serie de argumente, care sunt utilizate în procesare. Sintaxa de bază
este următoarea:
95
Să se observe că, în acest exemplu, este o singură noutate: înainte de câmpul Disciplina, s-a scris
funcția UPPER, care transformă caracterele minuscule în caractere majuscule. În afară de aceasta, în
gridul interogării, câmpul care prezintă disciplinele nu are un nume.
În clauza SELECT, se pot redenumi câmpuri sau se pot specifica nume pentru expresii, folosind
următoarea sintaxă:
Crearea unui nou câmp calculat pe baza câmpurilor din tabelele implicate în interogare se
realizează, în exemplul precedent, prin numele Tip_majuscule.
96
SQL permite sintetizarea datelor din baza de date prin utilizarea unor funcții de grup asupra
coloanelor. O funcție de grup primește ca argument o întreagă coloană (sau coloane) și furnizează ca
rezultat o singură valoare, care sintetizează datele din coloana respectivă. Evident că instrucțiunile
SELECT cu funcții bloc sunt mai complexe.
Se examinează un exemplu care utilizează 3 funcții: pentru a obține valoarea medie a unei coloane
numerice, pentru a obține valoarea maximă dintr-o coloană și pentru a obține valoarea minimă dintr-o
coloană.
În acest exemplu, SGBD-ului i se solicită să calculeze numărul de ore mediu alocat pentru
disciplinele predate la facultate, dar și valoarea maximă a orelor pentru o disciplina, și valoarea minimă a
orelor înregistrată, făcând uz de coloanele logice Nr_ore_medie, Nr_ore_maxim, Nr_ore_minim,
respectiv.
Funcția COUNT este ușor diferită de celelalte și are 3 formate.
COUNT(*) întoarce numărul de rânduri dintr-un tabel care satisfac criteriul de selecție, incluzând
rândurile duplicat și rândurile ce conțin valori nule. În exemplul de mai jos, structura instrucțiunii este
mult mai simplă: este solicitat, în calitate de rezultat, numărul de rânduri ale tabelului discipline.
95
Atunci când se apelează la funcții agregate în clauza SELECT se utilizează, de obicei, și clauza
GROUP BY pentru a separa informația în grupuri distincte.
Clauza GROUP BY se folosește pentru a grupa rezultatele funcțiilor de grup după valoarea uneia
sau mai multor coloane. Dacă se dorește calculul unei valori pe grupe de linii, atunci se introduce clauza
GROUP BY, urmată de numele uneia sau mai multor coloane. În acest caz, funcția se aplică separat acelor
linii care au aceeași valoare a coloanelor listate de clauza GROUP BY.
Astfel, în exemplul de mai jos, sunt prezentate valorile câmpului Nume_Profesor, în același timp,
este calculat numărul mediu, maxim și minim de ore la o disciplină, grupate după profesor
(Nume_Profesor).
Clauza HAVING operează la nivel de grupuri ce au fost create, în prealabil, cu clauza GROUP BY.
Clauza HAVING este asemănătoare clauzei WHERE. WHERE acționează asupra tuturor câmpurilor ce
îndeplinesc condiția specificată, în timp ce HAVING acționează asupra grupurilor.
96
Cu ajutorul clauzei HAVING, se pot pune condiții pe grupurile de linii asociate cu fiecare valoare a
coloanelor de grupare. Doar grupurile care satisfac condiția sunt afișate în rezultatul interogării.
Exemplul de mai jos este similar cu cel precedent, având o singură deosebire: se afișează numai
acele valori ale coloanei Suma_balurilor_acumulate, care depășesc suma 2000.
Trebuie menționat că clauza HAVING trebuie să preceadă întotdeauna clauza ORDER BY.
95
Al doilea tip de subinterogare este evaluat invers, adică interogarea externă furnizează valori cererii
interne, iar rezultatele subinterogării sunt transferate cererii externe. Subinterogările corelate care apar în
clauza WHERE a unei interogări au următoarea formă generală:
96
…{expresie|(expresie1 [, expresie2 …])}
{>|<|=|>=|<=|<>} (<subinterogare>)
Să se observe că interogarea conține, în afară de cei doi operanzi, un operator. Operatorul ce
intervine în specificarea condiției reprezintă un operator de comparație (=, >, >=, <, <=, <>) care se aplică
numai în cazul în care subinterogarea returnează o singură valoare sau o singură linie de valori (definită pe
una sau mai multe coloane).
Predicatul este evaluat cu valoarea TRUE, în cazul în care comparația (indicată de unul din
operatorii de comparație) rezultatului expresiei (expresiilor) cu cel returnat de subinterogare, este TRUE.
În caz contrar, se evaluează la FALSE. Dacă interogarea subordonată nu produce nicio valoare, predicatul
se evaluează la valoarea NULL. Dacă subinterogarea returnează mai mult de o valoare (mai multe linii
definite pe o coloană, sau cel puțin o linie definită pe mai multe coloane) se produce o eroare de executare.
Următorul exemplu de cod reprezintă o subinterogare scalară, care determină lista de discipline care
are numărul maxim de ore din tot tabelul discipline.
Această interogare este destul de corectă, deoarece valoarea scalară a numărului de ore se compară
cu subinterogare care returnează o singură valoare. Ca rezultat, se obțin 2 înregistrări.
Cu toate acestea, în cazul în care se scrie următoarea interogare referitoare la întrebarea cu privire la
anumite valori din subinterogare:
Sistemul a afișat un mesaj de eroare, indicând faptul că pot fi obținute la subinterogare mai multe valori.
95
…{expresie|(expresie1 [, expresie2 …])}
[NOT] IN (<subinterogare>)…
Din sintaxa generală, se observă că există două forme ale predicatului cu includerea operatorului IN.
Predicatul, în forma sa mai simplă, presupune că, în partea stângă a operatorului IN, se poate găsi o
expresie, iar a două variantă presupune că partea stângă este constituită dintr-o linie de expresii.
Operatorul NOT IN verifică neapartenența la o mulțime.
Predicatul este evaluat la TRUE, dacă, în subinterogare, se găsește vreo linie egală cu cel din stânga
operatorului IN. În caz contrar, este evaluat la FALSE (chiar dacă subinterogarea nu întoarce nicio linie).
Dacă subinterogarea întoarce unele linii nule, iar restul liniilor sunt distincte de linia din stânga
operatorului IN, predicatul este evaluat la NULL.
O interogare imbricată poate fi o alternativă sintactică a unei expresii cu joncțiuni. Interogarea de
mai jos, afișează lista profesorilor (identificator, nume, prenume) care nu predau la grupa 'CIB171.'
96
Se consideră rezultatul subinterogării. Predicatul
Id_Profesor = ANY
(SELECT DISTINCT Id_Profesor
FROM studenti_reusita p JOIN grupe g ON p.Id_Grupa=g.Id_Grupa
WHERE Cod_Grupa = 'CIB171');
întoarce valoarea TRUE, dacă identificatorul specificat de coloana Id_Profesor, din interogarea principală,
va figura în lista de valori a tabelului studenti_reusita (returnată de subinterogare). Datorită utilizării
predicatului NOT, valoarea TRUE va fi obținută cu excepția cazului în care profesorul este în listă. Acest
predicat este verificat pentru fiecare linie din interogarea principală, care returnează toate Id-urile
profesorilor în tabelul profesori.
95
Fie se scrie următoarea interogare, care afișeze numele și prenumele profesorului cu identificatorul
mai mare decât al profesorilor care predau la grupa 'CIB171'.
96
lnstruc/iunea SELECT Transact-SQL
OM~i Interogarea principala returneaza lista tuturor profesorilor. Identificatorii unici ai profesorilor
(Id_Profesor) sunt preluati de subinterogare ~i comparati cu identificatorii returnati din interogarea
principala. in a~a fel, rezultatul va include doar liniile dorite. Cuvantul-cheie DISTINCT este folosit pentru
rile)
a garanta ca numele fiecarui profesor este returnat doar o singura data.
Un avantaj al operatorului EXISTS este dat de faptul ca nu mai este continuata cautarea 1n cererea
atele
intema dupa ce aceasta regase~te o linie. Ca altemativa a lui EXISTS, poate fi utilizat operatorul IN intr-o
cerere nesincronizata.
unile
actic, 4.5.7. Subinterogari in clauza FROM
Pana acum, 1n clauza FROM, a fost specificata o lista de tabele. Deoarece rezultatul unei
instructiuni SELECT este un tabel, apare intrebarea daca o interogare poate participa dupa FROM in
calitate de tabel. Raspunsul este afirmativ. Formatul unei subinterogari 1n clauza FROM arata precum
urmeaza:
elele
... (<instructiune SELECT>) AS <alias> [(<coloanal>[,<coloana2> ... ])] ...
in acest format, <alias > este aliasul care se atribuie tabelului construita de subinterogare, ale
WM. carei coloane, de asemenea, pot fi optional atribuite nume noi. Numarul de coloane ale aliasului coincide
cu numarul de coloane returnat de subinterogare. La randul sau, subinterogarea, evident, poate contine
subinterogari (subinterogari simple fara operatii pe multimi).
Aceste expresii pot fi specificate intr-o lista a clauzei FROM exact ca un tabel. Interogarea
cazul principala poate face referire la coloanele subinterogarii ca la coloanele oricarui tabel obi~nuit.
Urmatoarea interogare cere afi~are tuturor coloanelor din tabelul discipline (alias tJ) cu numarul de
~uery ore minimal. Un SELECT imbricat sta dupa clauza FROM ~i se utilizeaza de SELECT-ul principal ca un
sa se tabel virtual numit t2.
121 % •
<interogare SQL>
{UNION [ALLJI INTERSECT I EXCEPT}
iitia <interogare SQL> [ ... ]
a ca
Instruc/iunea SELECT Transact-SQL
Operatorii din teoria multimilor presupun eliminarea duplicatelor ca optiune implicita. Daca se
dore~teutilizarea acestor operatori cu mentinerea duplicatelor, este suficienta specificarea optiunii ALL.
OptiuneaALL poate conserva duplicatele doar cu utilizarea operatorului UNION ALL.
Pentru obtinerea liniilor, care coincid pe campurile retumate de doua sau mai multe tabele, se aplica
operatorul INTERSECT. in exemplul de mai jos, se afi~eaza lista profesorilor, ld_Profesor, care predau
discipline grupei 'CIBI71' ~i grupei 'INF171':
S.QLQuery1.sql - LOC. .. versitatea (s.a (64))* -ti ' queries for examp!es... iversitatea (sa {53}}*
- SELECT r . Id Prof es or
FROM stu d enti reusita r ::'.Cl! gru pe g ON r . Id_Gru p a =g . Id_Gr upa
3 ~l)HERE g . Cod_Grupa == 'CIB171'
HJTERSECT
5 SELECT r . I d Profesor
·:• FROM studenti reusi ta r :Oiil grupe g ON r . Id_Grupa ;:; g . Id_Gr upa
7 V.JHERE g , Cod_Grupa = 'INF171'
121 %
5 117
Daca, in exemplul de mai sus, operatorul INTERSECT este substituit cu EXCEPT, se obtine un
rezultat, intr-un fel, invers celui precedent, adica, se va afi~a lista profesorilor care predau discipline
primei grope ~i nu predau grupei a doua.
5QLQuery1 .sq! - LOC..,versitatea (>a (64))* .µ X queries for examples. .. iversitatea (sa (53))*
- SELECT r . Id Profesor
L FROM studenti reusi ta r JOP gr u pe g ON r . Id_Grupa =g . Id_Grupa
~ \IJHERE g . Cod_Grupa = 'CIB171'
". EXCEPT
~ SELECT r . I d Profesor
FROM studenti reusita t' JC::: gt'Upe g ON r . Id_Grupa - g Id_Grupa
7 WHERE g . Cod_Grupa = 'INF171'
121 %
Operatorul UNION permite fuzionarea a doua selectii pentru a obtine o multime de randuri egala cu
uniunea acestor doua selectii. Drept exemplu poate servi urmatoarea instructiune: sa se formeze lista
tuturor profesorilor care au lectii in grupele mentionate. Comanda respectiva va elimina duplicatele.
Instruc/iunea SELECT Transact-SQL
case SQLQuery1.sql - LOC... versitatea (sa (64))*" il X ueries for e..-ampfes...lversitatea (sa (53.}}"'
ALL. - SELECT r . I d Profesor
2 FROM studenti reu s ita r JOIN grupe g ON r . Id _Gr upa =g . Id_Gru pa
aplica WHERE g . Cod_G r upa = 'CIB171'
•redau UNION
5 SELECT r . Id Profesor
•
~ up a
121 %
ml
~
Results
FROM stu denti reusita r : · c~· gr upe g ON
WHERE g . Cod_Gr upa = 'INF171'
~ll Messages
ld_Profesor
r Id_G r upa "' g . I d_G r upa
101
2 102
r upa 3 Hl3
~ 1il4
11\7
intrebiri de control:
1. Ce facilitati ofera componenta SQL Transact-SQL Query Editor ?
2. Ce reprezinta DDL, DML, DCL ~i TCL?
3. Ce operatori ofera limbajul Transact SQL?
4. Care este sintaxa de baza a instructiunii SELECT?
5. Ce functii ofera limbajul Transact SQL (inclusiv functii de agregare)?
1tine un 6. Interogari cu JOIN. Tipuri de jonctiuni.
scipline 7. Lace servesc interogarile corelate?
8 Cum pot fi redate operatiile INTERSECT ~i EXCEPT dintre doua subinterogari prin interogari
-
!_Gru p a
9
imbricate?
Care sunt tehnicile de limitare a numarului de linii returnate de interogare?
Sarcini practice:
Sarcinile vor fi aplicate asupra bazei de date funiversitateaj, a carei descriere scurta este propusa in
continuare.
Schema bazei de date consta din cinci scheme relationale:
d_Gru p a -------·~-,,,~~,·-~···~~--------·---- ·----------------·
discipine(Id_ Disciplina, Disciplina, Nr_ore_plan_ disciplina)
grupe(ld_ Grupa, Cod_ Grupa, Specialitatea, Facultate)
studenti(Id_ Student, Nume_Student, Prenume_Student, Data_ Nastere_Student, Adresa_Postala_Student)
pro/esori(Id_Profesor, Nume_ Profesor, Prenume_ Profesor, Adres a_Postala_Profes or)
studenti reusita(Id Student, Id Disciplina, Id Profesor, Id Grupa, Tip Evaluare, Nota, Data Evaluare)
egala cu in ceea ce prive~te tabelul studenti, contine date despre identificatorul studentului (ld_Student) ,
eze lista numele studentului (Nume_Student), prenurnele studentului (Prenume_Student), data de n~tere a
. studentului (Data_Nastere_Student) ~i adresa po~tala a studentului (Adresa_Postala_Student) .
lnstruc/iunea SELECT Transact-SQL
Tabelul profesori este asemanator tabelului despre studenfi ~i confine, pentru fiecare identificator
unic al profesorului (ld_Profesor), numele profesorului (Nume_Profesor), prenumele profesorului
(Prenume_Profesor) ~i adresa po~tala a profesorului (Adresa_Postala_Profesor).
In tabelul grupe, pentru fiecare identificator unic al grupei (Id_ Grupa), este indicat codul grupei
(Cod_ Grupa), specialitatea (Specialitatea) ~i denumirea facultafii (Nume_Facultate).
Tabelul studenti_reusita confine date despre nota (Nota) ~i data de evaluare (Data_Evaluare). In
afara de aceasta, tabelul respectiv confine date despre identificatorul studentului (Jd_Student),
identificatorul disciplinei (ld_Disciplina), identificatorul profesorului (ld_ Profesor), identificatorul grupei
(Id_ Grupa) ~i tipul de evaluare (Tip_Evaluare), care impreuna constituie cheia primara a tabelului.
in figura ce urmeaza, este reprezentata diagrama bazei de date:
I
discipline
- ..
"""-""'_...,...,, studenti_reusita pr:ofesori
? ld_Disciplina ? ld_S:tudent ? ld_Profesor
Disciplina ? lcl_Disciplina Nume_Profesor
Nr_o re_p Ian_ d isci pl in a ? ld_Profesor Prenume_Profernr
? ld_Grupa Adresa_Postala_Profesor
? Tip_Evaluare
studenti
Nota
? Id Student
Data Evaluare gr:upe
Nume_S:tudent ? ld_Grupa
Prenume_5tudent Cod_ Grupa
Data_N astere_5tu dent Specialitate
Adre;;a_Postala_5tudent Nume_Facultate
ificator 12. Furnizati, in evidenta academica (reu~ita) a studentilor cu prenumele Alex, urmatoarele date:
sorului numele, prenumele, denumirea disciplinei, notele (inclusiv la probele intermediare) ~i anul la care
au sustinut.
grupei 13. Aflati cursurile urmate de catre studentul Florea loan.
14. Aflati numele ~i prenumele studentilor, precum ~i cursurile promovate cu note mai mari de 8 la
are). In examen.
udent), 15. Gasiti numele ~i prenumele studentilor, care au sustinut examen atat la profesorul Ion, cat ~i la
grupei profesorul Gheorge in anul 2017 (folositi pentru nume clauza LIKE)
16. Furnizati numele ~i prenumele studentilor, care au studiat discipline cu un volum de lectii mai mic
de 60 de ore, precum ~i profesorii (identificatorii) respectivi, care le-au predat.
17. Afi~ati numele ~i pronumele profesorilor, care au predat eel putin o disciplina studentului cu
identificatorul 100.
18. Afi~ati numele ~i prenumele profesorilor, care au predat doar discipline cu o incarcare orara mai
mica de 60 de ore.
19. Gasiti numele ~i prenumele profesorilor, care au predat discipline, in care studentul "Cosovanu" a
fost respins (nota <5) la eel putin o proba.
20. Afi~ati numarul de studenti care au sustinut testul (Testul 2) la disciplina Baze de date in 2018.
or 21. cate note are fiecare student? Furnizati numele ~i prenumele lor.
22. Sa se obtina numaru! de discipline predate de fiecare profesor (Nume_Profesor,
Prenume_ Profesor).
23. Sa se obtina lista disciplinelor (Disciplina) sustinute de studenti cu nota medie de promovare la
examen mai mare de 7, in ordine descrescatoare dupa denumirea disciplinei.
24. Sa se afi~ase lista disciplinelor (Disciplina) predate de eel putin doi profesori.
25. in ce grupe de studii (Cod_ Grupa) figureaza mai mult de 24 de studenti?
26. Gasiti numele, prenumele ~i adresele studentilor ~i ale profesorilor care locuiesc pe strada 31
August.
27. Afi~ati studentii (identificatorii) care au sustinut (evaluare examen) la toate disciplinele predate de
prof. lon.
28. Gasiti numele, prenumele ~i media grupei studentilor care au sustinut toate disciplinele predate de
profesorii ce locuiesc pe strada 31 August.
29. Determinati numele ~i prenumele studentilor, care au sustinut examene cu o nota mai mica decat
oricare dintre notele studentilor cu identificatorul l 00.
30. Cati studenti au studiat, deja, disciplina Baze de date in 2018 ~i 2019 ~i care este media lor la
reu~ita curenta?
ifesor) 31. Fumizati numele ~i prenumele studentilor, care au avut mai mult de doua dezaprobari intr-un an la
o disciplina.
32. Fumizati numele, prenumele ~i media notelor pe grupe pentru studenti
33. Gasiti numele ~i prenumele studentilor, care nu au luat nota.de promovare la reu~ita curenta la nicio
:e la al disciplina.
34. Gasiti numele ~i prenumele studentilor, care nu au luat note de promovare (inclusiv note
intermediare) la nicio disciplina.
35. Gasiti denumirile disciplinelor ~i media notelor pe disciplina. Afi~ati numai disciplinele cu medii
mai mari de 7.0.
ta mai
36. Gasiti numele, prenumele ~i adresele studentilor ~i ale profesorilor care locuiesc 'intr-o localitate.
Sa se afi~eze denumirea localitatii ~i numarul de locuitori inclu~i 'in cele doua categorii. Datele
n anul
se afi~eaza 'in ordinea crescatoare a numarului membrilor din categoria mentionata anterior.
, ~i au
Instruc/iunea SELECT Transact-SQL
37. Gasiti disciplina sustinuta de studenti cu nota medie (la examen) cea mai inalta.
38. Furnizati denumirile disciplinelor cu o medie mai mica decat media notelor de la disciplina Baze
de date.
39. Gasiti denumirile disciplinelor la care nu au sustinut examenul, in medie, peste 5% de studenti.
Transact-SQL: instrucfiuni procedurale
Baze
5. TRANSACT-SQL: INSTRUCTIUNI
, PROCEDURALE
SQL standardizat (ANSI SQL) este un limbaj de interogare pentru sistemele de gestiune a bazelor
de date obiect-relationale ~i nu are puterea unui limbaj de programare. Nu permite utilizarea de variabile,
structuri de control al fluxului, bucle ~i alte elemente caracteristice programarii. Deci, nu e de mirare ca
SQL este un limbaj de interogiri, nu un limbaj de programare.
Astfel, SQL este instrumentul ideal pentru a lucra cu bazele de date. SQL este un limbaj
neprocedural cu format liber, deoarece precizeaza ce rezultate sunt necesare, ~i nu procedura prin care se
obtin acestea.
Atunci cand se dore~te realizarea unei aplicatii complete pentru gestionarea unei baze de date
relationale, este necesar sa se utilizeze un instrument, care ar sustine atat capacitatea de interogare SQL,
cat ~i calitatile limbajelor de programare traditionale. Transact-SQL este limbajul de programare pe care
Microsoft SQL Server ii ofera pentru a extinde standardul SQL cu alte tipuri de instructiuni ~i elemente
proprii limbajelor de programare.
Implementarea limbajului Transact SQL permite realizarea de prelucrari complexe de tip procedural
prin intermediul instructiunilor ce controleaza fluxul executiei in pachetele de comenzi. Transact-SQL
extinde standardul SQL cu implementarea structurilor de programare. Aceste implementari sunt familiare
dezvoltatorilor cu experienta in C ++,Java, Visual Basic .NET, C # ~i in limbajele similare.
in acest capitol, vom defini structurile de programare implementate In SQL Server.
5. 1. Blocuri fi variabi/e
Blocurile delimiteaza o serie de instructiuni ~i pot fi utilizate cu conditii IF ~i cu bucle WHILE.
Blocurile pot contine instructiuni sau alte blocuri.
0 variabila este o entitate careia ii este atribuita o valoare. Aceasta valoare poate fi modificata in
timpul procesului in care este utilizata variabila. SQL Server are doua tipuri de variabile: locale ~i globale.
Variabilele locale sunt definite de utilizator, in timp ce variabilele globale sunt furnizate de sistem ~i sunt
predefinite.
La randul lor:
• Pachete de programe: grupeaza proceduri, functii.
• Declan~atoare pe baza de date: blocuri Transact-SQL asociate tabelelor (de baza sau virtuale)
~i lansate automat in executie cand are loc o comandii de manipulare.
BEGIN
{
<instructiune_sql> I <bloc instructiuni sql>
}
END
unde { <instrucfiune_sq/> I <bloc instrucfiuni sq/> } reprezinta orice instructiune sau grup de
instructiuni valide definite intr-un bloc de instructiuni. Blocurile BEGIN ... END pot fi imbricate.
De~i toate declaratiile Transact-SQL pot fi valabile intr-un bloc BEGIN ... END, unele dintre ele
nu ar trebui sii fie grupate intr-un singur pachet (bloc de instructiuni).
5. 1.2. lnitializarea
, variabilelor locale
Un bloc Transact-SQL poate fi construit ~i din alte sectiuni, precum cea declarativa. Sectiunea
declarativa incepe cu instructiunea DECLARE ~i este optional!; ea poate contine o serie de declaratii,
inclusiv a variabilelor.
in limbajul Transact-SQL pot ft folosite variabile locale pentru memorarea unor valori care pot fi
testate sau modificate, in plus, asigura transferul datelor catre ~i de la tabelele bazei de date. Variabilele
locale au ca domeniu de definitie lotul, procedura sau blocul in care au fost declarate.
0 variabila locala se declara folosind instructiunea DECLARE care specific! un identificator (un
nume care trebuie sa inceapa cu caracterul @) ~i tipul variabilei.
Sintaxa de declarare arata astfel:
, permite @@ERROR
Contine numarul celei mai recente erori Transact-SQL.
liitate de Valoarea 0 indica faptul ca nu s-a produs nicio eroare; in caz contrar, cont ine ultimul
numar de eroare generat de sistem. Eroarea variabilei globale @@ERROR este utilizata, in
general, pentru a verifica starea de eroare a unui proces executat.
@@IDENTITY
ulei , dar,
Contine valoarea campului IDENTITY al ultimei inregistrari inserate.
@@VERSION
Contine informatii in legatura cu sistemul ~i compilarea curenta a serverului instalat.
@@SERVERNAME
riabilelor.
Returneaza numele serverului.
- pentru
LECT. In @@LANGUAGE
Viicrosoft, Returneaza numele limbii in uz.
Transact-SQL: instrucfiuni procedurale
@@MAX CONNECTIONS
Returneaza numarul maxim de conexiuni permise.
in acest exemplu, vor fi prezentate informatiile catorva variabile globale:
Versiunea SQL Server
PRINT ' Versiunea:' + @@VERSION
-- Limba de aplicare
PRINT ' Limba: ' +@@LANGUAGE
-- Numele serverului
PRINT ' Server: ' + @@SERVERNAME
-- Numarul de conexiuni permise
PRINT ' Conexiuni : ' + STR(@@MAX_CONNECTIONS)
~i Messages
SQL Server 2017 {RTM} - 14 . 0 .1000. 1 69 (Xf4)
Vers iunea: t.fi.c r o s oft
Aug 22 20 17 17 : 04:49
Copyrig h t (C) 2017 Mic r o a-::·f-r. Corpora t i on
Deve loper Edition {f 4-b i t) on Wi ndows 10 Pr D 10 . 0 <Xf4> (Build 2-6239: }
CASE <expresie_intrare>
WHEN <expresie_comparare> THEN <expresie_rezultat>
[WHEN <expresie_comparare> THEN <expresie_rezultat> ... ]
[ELSE <expresie_rezultat_alternativ>]
END
Fiecare conditie WHEN este evaluata sub forma <expresie_intrare> = <expresie_ intrare> ~i, daca
rezultatul are valoarea TRUE, este returnata valoarea <expresie _rezultat> ~i nici o alta conditie WHEN nu
mai este evaluata.
Daca nici una dintre conditiile WHEN nu este evaluata ca adevarata ~i exista o conditie ELSE, este
returnata valoarea <expresie_rezultat> asociata conditiei ELSE.
Daca nici una dintre conditiile WHEN nu este evaluata ca adevarata ~i nu exista o conditie ELSE,
este returnata valoarea NULL.
in exemplul din imaginea de mai jos este evaluat cu ajutorul expresiei CASE campul Id_ Grupa din
tabelul studenti_reusita. in functie de valoarea campului, este retumat un text mai informativ pentru
utilizatorul bazei de date.
Transact-SQL: instrucfiuni procedurale
IF <expresie_booleana>
{ <instructiune_sqll> I <bloc instructiuni sqll> }
[ ELSE
{ <instructiune_sql2> I <bloc instructiuni sql2> } ]
Instructiunea IF... ELSE impune urmatoarele conditii de executie: Daca valoarea
<expresie_ booleanii> este TRUE, se executa instructiunea sau blocul de instructiuni
lac a {<instrucfiune_sqll > I <bloc instrucfiuni sqll >). Clauza ELSE este optionala ~i aceasta este urmata de
VnU instructiunile, care trebuie sa fie executate, daca valoarea expresiei <expresie_ booleana> este FALSE sau
NULL.
5QLQuery1.sql - LOC. .. versitatea (s.a (64))' ;;i X queries for exampfes.. •• iversitatea {sa (53))
-'DECLARE @cantor INTEGER
2 - SET @cantor "
~ 'S ELECT COUNT(
~ FROM profesori p L':P ~om SELECT Id_Profesor FROM studenti_reusita ) AS t
~ ON p . Id_Profesor " t . Id_P rofe sor WHERE t . Id_Profesor is n .• 1 .. )
6 - IF @conto r " 16 PRINT 'Foarte multi profesori nu au ore la Facultate'
ELSE
SELECT CAST COUfF Id Profesor @conto r AS CHAR 3 ' au ore planificate'
AS Num_cu_plan ,
Cot.JCAT •@cont or nu au ore plan if icate'
AS Num_fara_plan
FROM profesori
121 %
Num_cu_plan Num_fara_plan
·····················································
i 17 au ore planrricate , lS nu au ore planrricate
in clauza ELSE, sunt prezentate 2 exemple de concatenare a variabilei de tip numeric cu ~irul de
caractere. Dupa cum se vede, utilizarea instructiunii CONCAT permite evitarea utilizarii functiilor de
convertire explicita. Sa se observe, in exemplul dat, modul de utilizare a variabilelor locale, care sunt
valabile 'in cadrul acestei instructiuni.
WHILE <expresie_booleana>
{ <instructiune_sql> I <bloc instructiuni sql> I BREAK I CONTINUE }
<expresie_booleana>
Evalueaza expresie ~i retumeaza TRUE sau FALSE. in cazul in care expresia booleana contine o
instructiune SELECT, aceasta se va scrie intre paranteze rotunde.
{<instructiune_sql> I <bloc instructiuni sql> }
Reprezinta orice instructiune sau grup de instructiuni, definite in forma de bloc de instructiuni. Un
bloc de instructiuni este o secventa, eventual vida, de instructiuni. Aceste instructiuni se executa in
ordinea in care apar in interiorul blocului. Sintactic, blocul de instructiuni lncepe cu cuvantul-cheie
BEGIN ~i se termina cu cuvantul-cheie END.
BREAK
Se realizeaza ie~irea foqata din WHILE Toate instructiunile situate dupa cuvantul-cheie END, care
marcheaza sf'ar~itul buclei WHILE, sunt executate.
CONTINUE
Cauzeaza repomirea buclei WHILE, ignorand toate instructiunile care urmeaza dupa cuvantul
CONTINUE.
Tran.w1ct-SQL: instrucfiuni procedurale
in timpul executarii, se evalueaza mai intai conditia buclei a ciirei valoare trebuie sa fie intreaga.
Daca valoarea calculata este TRUE, atunci instructiunea se executa. Cand conditia, adica valoarea
(inclusiv prima) a expresiei booleene din paranteze este FALSE, se face un salt la instructiunea de dupa
corpul instructiunii WHILE, deci, instructiunea WHILE se termina. Astfel, instructiunea asociata cu
WHILE se executa repetat, cat timp valoarea asociata conditiei este diferita de FALSE.
A~adar, operatorul WHILE se executa de zero sau mai multe ori. Executarea instructiunilor buclei
WHILE poate fi controlata din interiorul buclei cu ajutorul cuvintelor-cheie BREAK ~i CONTINUE.
Urmatorul exemplu utilizeaza bucla WHILE, afi~and valorile unui cantor:
2 SET @MylNT = 1
:· -WHILE ~v1y INT , 4 Nurnarul
4 BEGIN 2
SE LECT @'·~y HIT AS Numa r ul Nurnarul
SET @MyINT = @"'lyINT + 1 3
END
100 % ... ..!!
MS SQL Server va executa repetat bucla atata timp cat valoarea nu va deveni egala cu 4. Testul
buclei va avea loc inaintea fieciirei executii a corpului.
5.2.4. lnstructiunea
, BREAK
Adesea este convenabil sa se controleze ie~irile din bucle altfel decat testand conditia la inceputul
sau s~itul buclei. Instructiunea BREAK ofera o ie~ire mai devreme din instructiuni. BREAK permite
ie~irea dintr-o bucla, din oricare punct din interiorul instructiunii WHILE sau al instructiunilor IF ...
ELSE sau CASE. Cand instructiunea BREAK este intalnita in interiorul unei bucle, aceasta se termina
imediat. Se parcurge, in continuare, instructiunea care urmeaza dupa bucla.
0 bucla din care se poate ie~i (folosind BREAK), dupa un numiir cunoscut de p~i sau la
indeplinirea unei conditii (ie~ire foqata), este, de obicei, urmata de o instructiune IF ... ELSE care stabile~te
cum s-a ie~it din bucla: fie dupa numarul maxim de p~i, fie mai inainte datorita satisfacerii conditiei.
lnstructiunea BREAK poate fi utilizata cu oricare dintre celelalte instructiuni ale limbajului Transact SQL,
aceasta instructiune producand ie~irea.
in exemplul urmator, repetarea buclei va fi intrerupta de instructiunea BREAK:
ENO
100 % • ..!.I
ll
Transact-SQL: instruc/iuni procedurale
Utilizarea instructiunii BREAK poate simplifica expresiile din WHILE ~i poate contribui la
urmarirea mai u~oara a codului, de~i se poate evita instructiunea BREAK prin complicarea expresiei testate
in WHILE. in general, se recomanda ca instructiunea BREAK sa fie utilizata pentru scopuri speciale, ~i nu
ca ie~ire normala din bucla.
5.2.5. lnstructiunea
, CONTINUE
Instructiunea CONTINUE este opusa instructiunii BREAK. Nu se iese In afara buclei, ca In cazul
instructiunii BREAK. Ea face sa inceapa urmatoarea iteratie a buclei WHILE. Aceasta inseamna ca partea
de test se executa imediat.
Efectul instructiunii CONTINUE consta in oprirea iteratiei curente a buclei ~i un salt imediat la
prima instructiune din bucla, pentru a continua cu urmatoarea iteratie. Orice instructiune dupa cuvantul-
cheie CONTINUE este ignorata. Cu alte cuvinte, ea foqeaza urmatoarea iteratie a buclei sa aiba loc,
trecand peste instructiunile dintre ea ~i testul de conditie.
CONTINUE se aplica, de regula, numai la bucle, nu ~i la CASE. Un CONTINUE inauntrul unui
CASE dintr-o bucla declan~eaza urmatoarea iteratie a buclei. De~i acest lucru nu este o regula absoluta,
CONTINUE este adesea deschis printr-un test IF ...ELSE.
in exemplu, executia buclei (ciclului WHILE) folose~te cuvintele-cheie CONTINUE ~i BREAK.
Instructiunea BREAK nu va fi executata.
Instructiunea CONTINUE este folosita rareori, nu pentru ca folosirea ei este incorecta, ci pentru ca
aplicatiile in care ar putea fi utilizata sunt mai rare.
5.2.6. lnstructiunea
, RETURN
Uneori, este nevoie de o abandonare prematura a procesului de executare a instructiunilor. Aceasta
necesitate apare, de exemplu, in cazul cand se verifica anumiti parametri ~i parametrii dau rezultatul gre~it.
Prin intermediul comenzii RETURN, se poate foqa intreruperea unui proces. Comenzile ce urmeaza dupa
instructiunea RETURN nu vor mai fi executate.
Sintaxa instructiunii RETURN este:
RETURN permite parasirea neconditionata a unei interogari sau proceduri. RETURN are o actiune
imediata ~i completa, ~i poate fi utilizabila in orice punct, pentru a parasi o procedura, pachet sau bloc de
instructiuni. lnstructiunile urmatoare, dupa RETURN, nu sunt executate.
GOTO <eticheta>
Instructiunile GOTO pot fi imbricate. Formal, GOTO nu este necesara niciodata ~i, in practica, este
aproape intotdeauna u~or sa fie scris un cod tara ea. Cu toate acestea, poate fi sugerata o situatie in care
GOTO i~i poate gasi locul. Cea mai obi~nuita folosire este aceea de a abandona prelucrarea in anumite
structuri puternic imbricate, de exemplu, de a ie~i afara din doua bucle deodata. Instructiunea BREAK nu
poate fi folosita, deoarece ea parase~te numai bucla cea mai din interior.
in exemplu, cu ajutorul functiei de generare a numerelor aliatorii RANDO se populeaza 2 variabile
~i apoi se compara valorile lor:
Vl mai mare: PRINT Cot KAT 'V1 este ma i mare Vl= ' , @vl , ' V2 = ' , @v2 RETURN
<:: V2_mai_mare: PRINT CONCAT 'V2 este ma i mare Vl= ' , @v l ' V2=' , @v2 RETURN
121 % • I
l§l'i Messages
V2 es<:ce rr.a..:.. IT.3.I~ Vl = J . 3 57 721 V2= C .5S5!5!5 -"
Codul, implicand un GOTO, poate fi scris intotdeauna rara GOTO, chiar daca pretul pentru aceasta
este o variabila suplimentara, sau teste repetate. Cu toate ca, in privinta subiectului, instructiunea GOTO
muta controlul executiei catre una etichetata, codul este putin lizibil ~i se pare ca instructiunea GOTO ar
trebui folosita cu economie (codul este putin lizibil), daca nu chiar deloc.
/ __
Transact-SQL: instrucfiuni procedurale
DELAY
Perioada de timp, care trebuie sa treaca (nu mai mult de 24 de ore) pana la continuarea executarii
unui pachet, proceduri stocate sau tranzactii.
'timp al!jlteptare'
Argumentul ,,timpul de ~teptari" poate fi specificat in orice format acceptat de date DATETIME,
sau ca o variabila locala. Daca nu pot fi specificate datele, partea valorii DATETIME nu este
admisa.
TIME
Specifica timpul de executare a pachetului, procedurii stocate sau tranzactiei.
'ora executrie'
Timpul la care instructiunea WAITFOR se termina. Argumentul poate fi redat in orice format
acceptat de date DATETIME sau de o variabila locala. Daca datele nu pot fi specificate, prin
urmare, o parte a valorii DATETIME nu va fi autorizata.
Astfel, operatorul WAITFOR stabile~te un timp de intarziere 'timp ~teptare' pana la momentul
lansarii in executie a unei instructiuni SQL sau stabile~te ora ('ora executie'), la care se va lansa in executie
o instructiune SQL.
in urmatorul exemplu, este prezentat modul in care se creeaza o intarziere pe un minut. Interogarea
SELECT realizeaza preluarea datelor peste un minut:
5.3. Functii
, cu utilizarea valorii NULL
Pentru tratarea valorilor NULL, Transact-SQL ofera o serie de functii, care pot fi considerate
variante ale expresiei CASE. Acestea sunt functiile COALESCE, JSNULL ~i NULLIF.
Transact-SQL: instrucfiuni procedurale
ieaza Cuvantul-cheie NULL nu se utilizeaza pentru valoarea zero, ~ir de caractere de dimensiunea zero
sau alte valori "cunoscute" ca fiind lipsa. NULL nu este egal cu nimic, nici macar cu alte valori NULL.
ru, se NULL desemneaza o valoare ,,necunoscutii'' (sau ,,inexistentii'' - SQL nu face diferenta). Valoarea
OU CU
NULL nu este tratata ca o constanta ordinara. Modalitatile de utilizare in interogari ~i testarea valorilor
trebui NULL sunt specifice.
to ate in bazele de date, logica binarii, care cuno~te doar doua valori ,,adevaraf' ~i ,fals", e substituita de
SQL cu o logica ternara, cu trei valori ,,adevarat" (TRUE), ,fals" (FALSE) ~i ,,necunoscut" (NULL).
Jlu, la Urmeaza tabelele de adevar ale acestei logici:
•itatea
a NOT a aANDb FALSE NULL TRUE aORb FALSE NULL TRUE
FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE NULL TRUE
NULL NULL NULL FALSE NULL NULL NULL NULL NULL TRUE
TRUE FALSE TRUE FALSE NULL TRUE TRUE TRUE TRUE TRUE
Cu alte cuvinte, valoarea NULL determina aparitia unei logici cu trei valori de adevar in cazul
conditiei de selectie. Pentru orice tuplu dat, rezultatul evaluarii acestei conditii poate fi TRUE, FALSE sau
NULL.
Prezenta lui NULL In SQL poate constitui o sursa de probleme. Este important sa se inteleaga ca
"valoarea nula'', de fapt, nu este o valoare, ci o absenta a valorii ~i ca asupra ei nu se poate aplica nicio
operatie aritmetica sau de comparatie din cele de mai sus. Astfel, NULL este un cuviint-cheie, ~i nu o
~utarii
constanta. Adica, comparatia de tipul Nume=NULL este incorecta.
Pentru testarea prezentei sau absentei valorii pentru o coloana, exista un predicat special cu
urmatoarea sintaxa:
TIME,
u este _ccoloan~> IS [NOT] NULL_
Din sintaxa operatorului IS NULL, reiese ca testarea unei valori nule nu poate furniza rezultatul
NULL. Aceasta expresie poate avea fie valoarea TRUE, fie valoarea FALSE.
CASE
WHEN <expresiel> IS NOT NULL THEN <expresiel>
~data in
WHEN <expresieN>IS NOT NULL THEN <expresieN>
ELSE NULL
END
Aceasta functie poate fi utila pentru analiza mai multor coloane dintr-un set de date, ca in exemplul
de maijos.
nsiderate
Transact-SQL: instruc/iuni procedurale
SQLQuery2.sql - MV ... r (MV\ marian (60))* .;;; X NULL expressioos.s..•er {MV\marian (57)} Object Explorer Detail
DROP TABLE IF EY:STS #t
2 GO
-, - CREATE TABLE #t • Id INT, coll CHAR ( 1 ), col2 CHAR(l , col3 CHAR ( 1 ');
L. - INSERT INTO #t VALUES ( 1 ,, IJ\.)._ L, ' x' , •y I ; ,
0 utilizare tipicii a functiei COALESCE o constituie inlocuirea unui NULL cu altceva. De exemplu,
expresia COALESCE(col2, '') returneazii valoarea cfunpuhii ~i returneazii un ~ir vid, dacii este NULL.
5.3.3. Functia
, /SNULL
Functia ISNULL din Transact-SQL este folositii pentru convertirea unei expresii nule in altii valoare
[29]. Aceastii functie are sintaxa:
in continuare, este afi~at un exemplu de utilizare a ambelor functii in baza tabelului temporar creat
anterior.
121 11/a.
3 3 NULL w ,,,,
Avantajul functiei COALESCE, in raport cu functia ISNULL, constii in faptul ca COALESCE poate
avea mai multe valori alternative.
Transact-SQL: instrucpuni procedurale
CASE
WHEN <expresiel> IS NULL THEN <expresie2>
ELSE <expresiel>
END
5.3.4.. Functia
, NULLIF
Dimpotriva, functia NULLIF, valabila m Transact-SQL, compara doua expresii [37]. Daca acestea
sunt egale, functia returneaza valoarea NULL. Daca nu sunt egale, functia returneaza prima expresie. Nu
este posibila specificarea literalului NULL pentru prima expresie. Astfel, functia are urmatoarea sintaxa de
utilizare:
CASE
WHEN <expresiel> = <expresie2> THEN NULL
ELSE <expresiel>
END
Blocul CATCH urmeaza intotdeauna dupa blocul TRY. Aceasta este executata, daca ~i numai daca
lansarea unei instructiuni din blocul TRY ridica vreo eroare. Codul din blocul CATCH, este utilizat pentru
a face fata erorii ridicate.
Urmatorul exemplu ilustreaza utilizarea structurii TRY...CATCH.
BEGIN TRY
DECLARE @divizor int ,
@dividend int,
@resultat int
SET @dividend = 100
SET @divizor = 0
-- Aceasta linie duce la o eroare dupa impartirea la 0
SET @resultat = @dividend/@divizor
PRINT 'Nu exista nici o eroare'
END TRY
BEGIN CATCH
PRINT 'A aparut o eroare'
END CATCH
0 structura TRY .. CATCHnu poate contine mai multe blocuri de instructiuni Transact-SQL (cateva
blocuri BEGIN ... END) sau o constructie IF ... ELSE.
Daca nu exista erori in codul inclus in blocul TRY, atunci, cand ultima instructiune din acest bloc a
terminat executarea, comanda este transferata instructiunii imediat ce urmeaza dupa instructiunea asociata
END CATCH. Daca, insa, exista o eroare in codul inclus in blocul TRY, comanda este transferata primei
instructiuni a blocului CATCH asociat. Daca instructiunea END CATCH este ultima instructiune a unei
proceduri sau a unei actiuni stocate, comanda este returnata instructiunii care a apelat procedura stocata
sau a lansat declan~atorul.
Constructiile TRY... CATCH pot fi imbricate. Constructiile TRY...CATCH capteaza erorile
necontrolate ale procedurilor stocate sau ale declan~atoarelor executate de codul blocului TRY. Alternativ,
procedurile stocate sau decl~atoarele pot contine propriile constructii TRY. .. CATCH pentru a controla
erorile generate de codul !or. De exemplu, atunci cand un bloc TRY executa o procedura stocata ~i survine
o eroare in ea, eroarea poate fi controlata in urmatoarele moduri:
• Daca procedura stocata nu contine propria constructie TRY...CATCH, eroarea readuce controlul
la blocul CATCH asociat cu blocul TRY, care contine instructiunea EXECUTE.
• Daca procedura stocata contine o constructie TRY... CATCH, eroarea transfera controlul in
blocul CATCH al procedurii stocate. Cand codul de blocare CATCH este terminat, comanda este
returnata instructiunii imediat dupa instructiunea EXECUTE, care a chemat procedura stocata.
Instructiunile GOTO nu pot fi folosite pentru a intra In blocurile TRY sau CATCH, dar pot fi folosite
pentru a sari la o eticheta in acela~i bloc TRY sau CATCH, sau pentru a ie~i din blocul TRY sau CATCH.
Asocierea TRY... CATCH nu poate fi utilizata intr-o functie definita de utilizator.
mai daca
ERROR_NUMBER ()
at pentru
Aceasta functie returneaza numarul erorii care a aparut, o valoare de tip INT.
ERROR_SEVERITY ()
Aceasta functie returneaza gravitatea erorii. Valoarea returnata este de tip INT.
ERROR_STATE ()
Functia returneaza numarul starii de eroare, o valoare de tip INT
ERROR_LINE ()
Aceasta functie returneaza numarul liniei in care a aparut eroarea. Daca eroarea a survenit intr-un
declan~ator sau intr-o procedura stocata, aceasta returneaza numarul liniei intr-o rutina. Valoarea
returnata este de tip int.
ERROR_PROCEDURE()
Functia returneaza numele declan~atorului sau procedurii stocate in cazul in care a aparut eroarea.
Valoarea afi~ata este de tip NVARCHAR (126). Acesta va returna NULL, daca eroarea nu apare in
interiorul unui declan~ator sau procedura stocata.
Functiile sunt extrem de utile pentru efectuarea unui audit ale erorilor.
L (cateva Aceste functii returneaza NULL, daca sunt chemate din afara scopului blocului CATCH. Prin
intermediul lor, pot fi preluate informatii despre erori de oriuncie in cadrul blocului CATCH.
est bloc a
asociata BEGIN TRY
tta primei DECLARE @divizor int ,
ne a unei @dividend int,
·a stocata @resultat int
SET @dividend = 100
SET @divizor = 0
l erorile -- Aceasta linie duce la o eroare dupa impartirea la 0
lternativ, SET @resultat = @dividend/@divizor
control a PRINT 'Nu exista nici o eroare'
,1 survme
END TRY
BEGIN CATCH
;ontrolul PRINT ERROR_NUMBER()
PRINT ERROR_SEVERITY()
trolul in
PRINT ERROR_STATE()
nda este
PRINT ERROR_PROCEDURE()
ocata.
PRINT ERROR_LINE()
PRINT ERROR_MESSAGE()
i folosite END CATCH
TCH.
in mod logic, pot fi folosite aceste functii, pentru a stoca informatii intr-un tabel al bazei de date ~i
pentru a lnregistra toate erorile care apar.
Starea este o valoare care permite programatorului sii identifice acee~i eroare din diferite piirti ale
codului. Permite tratarea, recuno~terea erorii ~i reprezintii un intreg intre 0 ~i 255, ~i poate fi folosit
pentru a identifica sectiunea din cod care genereaza eroarea.
De exemplu, este posibila generarea exceptiei personalizate prin intermediul instructiunii
RAISERROR:
intrebari de control:
i erorii,
1. Tipuri de blocuri in Transact-SQL.
i care a
2. Prezentarea variabilelor.
3. Sa se explice functionarea buclei repetitive WHILE.
Li valori
lta dupa 4. Sa se explice functionarea expresiei CASE.
lOate fi 5. Utilizarea ~i actiunile structurii alternative IF. .. ELSE.
ALTER 6. Ce este o exceptie? Captarea ~i tratarea exceptiilor.
7 Functia instructiunii RAISERROR.
Transact-SQL: instruc/iuni procedurale
Sarcini practice:
1. Completati urmatorul cod pentru a afi~a eel mai mare numar dintre cele trei numere prezentate:
DECLARE @Nl INT, @N2 INT, @N3 INT;
DECLARE @MAI_MARE INT;
SET @Nl = 60 * RAND();
SET @N2 = 60 * RAND();
SET @N3 = 60 * RAND();
-- Aici ar trebui plasate IF-urile
PRINT @Nl;
PRINT @N2;
PRINT @N3;
PRINT 'Mai mare = ' + CAST(@MAI_MARE AS VARCHAR(2));
2. Afi~ati primele zece date (numele, prenumele studentului) in functie de valoarea notei (cu exceptia
notelor 6 ~i 8) a studentului la primul test al disciplinei Baze de date , folosind structura de
altemativa IF. ..ELSE. Sa se foloseasca variabilele.
3. Rezolvati acee~i sarcina, 1, apeland la structura selectiva CASE.
4. Modificati exercitiile din sarcinile 1 ~i 2 pentru a include procesarea erorilor cu TRY ~i CATCH, ~i
RAISERRROR.
Crearea tabelelor !ji indecijilor
6.1.1. lnstructiunea
, CREA TE TABLE
Atunci cand se creeazii un tabel, folosind instructiunile SQL, acesta se va gasi in baza de date
curenta. Pentru crearea tabelelor prin cod se utilizeazii instructiunea CREATE TABLE.
Instructiunea CREATE TABLE define~te coloanele tabelului, tipurile de date ale coloanelor ~i
diferite constrangeri pe care datele inregistrate (valori ale coloanelor) trebuie sa le respecte pentru
asigurarea integritatii bazei de date. Sintaxa generala a acestei instructiuni este:
in Transact-SQL Query Editor se insereaza primul exemplu de creare a unui tabel. Fie in baza de
date universitatea trebuie creat un tabel numit orarul cu cfunpurile Id_Disciplina, Id_Profesor,
Id_ Grupa, Zi, Ora, Auditoriu. Sa se observe cum este prezentata instructiunea in Query Editor:
c,'j universitatea
Nu inainte de scrierea instructiunii, se face un click pe comanda Execute sau tasta F5. Dupa
finalizarea procesarii instructiunii, sistemul ne comunica faptul ca instructiunea a fost incheiata cu succes
~i tabelul a fost creat in baza de date respectiva.
in cazul unui nou click pe butonul de executare, va fi prezentat urmatorul mesaj de eroare:
@')'I Messages
Mesajul comunica faptul ca a avut loc o tentativa de creare a unui tabel cu un nume, deja, existent in
baza de date ill uz.
Utilizand Microsoft SQL Server Management Studio, se poate verifica daca tabelul a fost creat
realmente. Pentru aceasta, se extind serverul, baza de date, unde a fost creat tabelul, precum ~i dosarul
Tables:
:r:;:~~~oi¢J
,,., FileTables
·I External Tables
ff Graph Tables
Im studenti
ll ml dbo.dis.ciplina_grupa_prof
Im studenti_reusita
:': · Im dbo.cfacipline
1+ Im dbo,qrupe
Crearea tabelelor !ji indec!jilor
a de Sa se observe in Transact-SQL Query Editor ca tabelul (subliniat) a fost creat pe server, in cadrul
?sor, bazei de date specificate.
unde <ACTIUNE> poate fi una din optiunile ADD, ALTER sau DROP, iar <descriere> este o comanda de
modificare asociata actiunii. Modificarea unui tabel poate crea probleme, daca este incompatibila cu
INT 1
continutul acestuia. De exemplu, trecerea unui camp la optiunea NOT NULL specifica faptul ca coloana nu
trebuie sa contina valori nule, ~i in cazul daca aceasta coloana contine deja valori, ele sunt nenule pentru
toate liniile tabelului.
Im Results ~· Messages
SQLQuery8.1 ql - LO .. .arian Cat elea (S9))' .., X qvenes for LabO~.s. .. Manan Cotelea (S6})* name
>upa 1 fli.Jd~ortu
- SELECT c . name
cces 2 ld_Disciplina
2 FROM sysobj ec ts o -, , l ' sysco lumns c ON o . i d ~, c.id
3 ld_Grupa
WHERE o name = 'orarul' , ld_Profesor
Ora
ALTER TABLE ora r ul ADD Bloc CHAR 1 i f iOT fJUL._; 6 Zi
~.,
name
I 7 - SELECT c . name
? FROM svsobjects o :;..;r;; syscolumns c ON o . i d c.id i~~ ;
o WHERE o . name = 'orarul' ;
f, 4 ld_Grupa
133 % ..
5 ld_Profesor
Ora
7 Zi
Sintaxa pentru adaugarea unor noi coloane (in limbajul T-SQL nu se pot specifica pozitiile
llt in coloanelor noi In structura tabelului; coloanele noi devin automat ultimele in cadrul structurii tabelului):
Pentru ~tergerea unei coloane dintr-un tabel, in instructiunea ALTER TABLE, se folose~te cuvantul-
cheie DROP. Sintaxa instructiunii de eliminare a unei coloane din structura tabelului:
ntul- SQLQuery3sql - MV.... versitatea (sa (53)}" .;;i X queries for lab05.sql..,rversitatea (sa (51)) Object fa
USE universitatea
2 GO
:· IF OBJEC T~_ID \. orarul ~
t .J' 'U 1
) IS i'-JC1 JUL". DROP TABLE orarul ;
a GO
.. .-: CREATE TABLE oraru lt Id_Disciplina rnr ';JT NUL L '
Id Profesor INT ..
alte Id_Grupa SMALLINT ,
e. in Zi CHAR ( 2 1 .
la o Ora TIME ,
te in Auditoriu INT ,
za la Bloc CHAR 1 1 i.id JU_,_ DEFAULT 1 ' B' •,
PRIMARY KEY l. Id_Grupa , Zi , Ora , Audit o r i u
sunt
Nonclustered
Acest tip de index are o structura separata de cea a tabelului. Ordinea fizica a liniilor tabelului nu
corespunde ordinii inregistrarilor fi~ierului index. Poate fi comparat cu indexul unei caqi, unde
oseda indexul este la s!ar~itul editiei, iar datele - la inceputul ei. Un tabel poate avea mai multi indec~i de
acest tip. Pointerul dintr-o linie-index a indexului Nonclustered catre o linie de date se nume~te
entru locator de linie. Structura locatorului de linie depinde de modul de aranjare a paginilor lor de date,
sau ele sunt stocate 'intr-un tabel-heap sau 'intr-un tabel clasterizat. Pentru un heap, un locator de
linie este un pointer spre linie. Pentru un tabel clasterizat, un locator de linie este cheia indexului
clasterizat
QL -
! ')cu Covering Indexes
ecuta
Index de acoperire - este un index Nonclustered care contine toate datele necesare pentru a
satisface o interogare. Indexul de acoperire reprezinta o strategie pentru ll:nbunatatirea
'na ~i performantelor de interogare ~i este extins cu coloane ce nu fac parte din cheie suplimentar la
,licita coloanele ce constituie cheia.
cheie
Crearea tabelelor ~i indeqilor
Conceptul de coloane incluse a fost introdus in SQL Server 2005. Acestea permit administratorului
bazei de date sa stocheze date despre coloanele tabelului in paginile indexului Nonclustered ~i evitii
cautiirile costisitoare a inregistriirii necesare in indexul Clustered. Desigur ca in orice optimizare a
indexului, trebuie sa se tina cont ca coloanele noi incl use (ce nu fac parte din cheie) necesitii o
mentenanta suplimentara in cazul in care datele din tabel sunt modificate.
Unique
lndexul de acest tip exclude cazul cand cheia indexului are valori duplicate ~i, prin urrnare, fiecare
rand in tabel sau in viziune este, de asemenea, unic. Ambele tipuri de indec~i Clustered ~i
Nonclustered pot fi Unique. Aceasta presupune ca oricare doua randuri nu pot avea acele~i valori
pe campurile ce constituie cheia indexului. in caz contrar, indexul nu este de tip Unique ~i mai
multe randuri pot avea acee~i valoare pentru cheie.
Indexed views
Un index asupra viziunii este materializat (executat). Adica viziunea ~i multimea-rezultat este
permanent piistrata intr-un index de tipul Unique Clustered, in acel~i mod, precum sunt piistrate
tabelul ~i indexul Clustered. Indec~ii de tip Nonclustered asupra viziunilor pot fl adaugati dupa
crearea indec~ilor de tip Clustered.
Spatial
Un index spatial ofera posibilitatea de efectuare mai eficientii a unor operatii asupra obiectelor
spatiale (datelor spatiale) dintr-o coloana de tip geometry sau geography. Un index spatial reduce
numiirul de obiecte asupra ciirora trebuie sa fie aplicate operatiile spatiale care sunt relativ mai
costisitoare (consumatoare de surse hardware).
Filtered
Reprezinta un index nonclustered optimizat, special adaptat pentru a satisface interogiirile care
selecteaza date dintr-o submultime de date bine definita. Acesta, pentru a indexa o poqiune de linii
din tabel, utilizeaza un filtru sub forma unui predicat. Un index de tip filtered bine conceput poate
imbunatati performantele interogiirii, reducand costurile de intretinere a indexului ~i costurile de
depozitare, comparativ cu indexulfull-tabel.
Full-text
Un tip special de index functional orientat pe marcare, care este construit ~i mentinut de Microsoft
Full-Text Engine for SQL Server (MSFTESQL) service. El ofera un suport eficient pentru
cautarea sofisticata a cuvintelor in datele de tip secvente de caractere.
Primary XML and Secondary XML Indexes
Tipul de date XML a fost introdus in SQL Server 2005. El permite stocarea documentelor XML sau
fragmentelor XML lntr-o coloana de tabel. Pentru oferirea unei performante rezonabile la
interogarea datelor XML, se creeaza unul sau mai multi indec~i XML. Daca indec~ii XML nu sun!
creati, intregul document XML trebuie sa fie inciircat in XML Document Object Model (DOM) ~i
cautat. 0 aplicare corecta a indec~ilor XML, evita necesitatea creiirii XML DOM pentru fiecare
rand care se examineaza.
Columnstore Indexes
Reprezinta un nou tip de indec~i, apiirut pentru prima data in SQL Server 2012 ca indeqi non-
clustered. Acest tip de indec~i nu utilizeaza B-arborii. Indec~ii de acest tip au fost introdu~i pentru a
oferi performante inalte interogiirilor care, de obicei, sunt tipice magaziilor de date construite pe
agregiiri ale seturilor mari de date.
Fiecare tabel poate contine maximum 999 de indeqi de tip Nonclustered ~i un index de tipul
Clustered. Dintre ace~tia fac parte ~i indec~ii generati pentru a sustine constrangerile PRIMARY KEY ~i
UNIQUE. Un index de tip Clustered poate include maximum 32 coloane incepand cu SQL 2016 [33,13].
Una din principalele caracteristici ale SGBD-ului SQL Server constii in posibilitatea de creare in
structura indexului a paginilor cu spatiu pentru inserarea cheilor noi, fiira a fl reorganizat, la nivel fizic, tot
Crearea tabelelor ~i indec~ilor
atorului B-arborele. Atunci cand un index de tipul Clustered este creat, SQL Server piistreaza datele tabelului in
'~i evita paginile bazei de date in acord cu ordinea campurilor-cheie.
nizare a Dacii, in tabel, este inserata o linie nouii sau daca valorile campului-cheie sunt modificate, este
cesita o necesara reorganizarea liniilor tabelului in paginile bazei de date. Daca o pagina este complet umpluta,
serverul muta aproximativ jumatate din liniile acestei pagini pe o pagina noua.
Acest proces poarta numele de page split ~i, in functie de dimensiunea tabelului, poate prejudicia
, fiecare sensibil executarea, in principal, daca apar multe actualizari ale campurilor-cheie.
1
ered ~i lndec~ii care includ coloane ce nu fac parte din chei ofera un avantaj mare, daca ei acopera
ii valori interogarea. Adica, daca indec~ii cuprind toate coloanele la care se refera interogarea.
: ~i mai
Adaugarea coloanelor ce nu fac parte din cheie necesita spatiu de disc suplimentar pentru piistrarea
indexului. in particular, adaugarea coloanelor ce nu fac parte din cheie de tipul VARCHAR(MAX) ,
NVARCHAR(MAX) , VARBINARY(MAX) sau XML poate, esential, sa creasca necesitatile de spatiu,
deoarece valorile coloanelor sunt copiate in index ~i raman, de asemenea, in tabel sau in indexul
tat este
clusterizat.
pastrate
tli dupa Beneficiul este atins in cazul operatiilor de selectare, deoarece optimizatorul de interogari poate
localiza datele din coloanele necesare in limitele indexului, nefiind accesate tabelul sau indexul de tip
Clustered. Totu~i, existenta multor coloane incluse poate mari timpul necesar pentru executarea operatiilor
de inserare, modificare ~i ~tergere a tabelului de baza sau a· indexului viziunii, din cauza cre~terii
iectelor operatiilor de mentinere a indexului.
reduce
Exista trei metode de creare a indec~ilor:
tiv mai
• in primul rand, prin definirea unei constrangeri PRIMARY KEY sau UNIQUE asupra unei
coloane, apeland la instructiunile CREATE TABLE sau ALTER TABLE.
Sistemul SQL Server creeaza automat un index unic pentru a impune cerintele de unicitate
le care dictate de constrangerile PRIMARY KEY sau UNIQUE.
de linii in mod implicit, un index unique clustered este creat pentru a impune o constrangere PRIMARY
it poate KEY, cu exceptia cazului in care exista deja un index clustered, sau se specifica un index unique
1rile de nonclustered.
In mod implicit, un index unique nonclustered este creat pentru a impune o constrangere
UNIQUE, cu exceptia cazului in care un index clustered este specificat in mod explicit ~i un
index clustered nu exista
'crosoft
pentru • A doua metoda de creare a indec~ilor se realizeaza prin intermediul instructiunilor Transact-
SQL.
• A treia metoda - folosind instrumentele grafice din SQL Server Management Studio.
De la bun inceput, se trece la examinarea formei a treia de creare a indec~ilor.
v1L sau
bile la
6.2.2. Crearea indec!jilor asupra tabelelor existente
1u sunt
OM) ~i Pentru vizualizarea structurii unui tabel ~i crearii unui index, se executa urmatorii p~i:
fiecare
1. Se deschide Microsoft SQL Server Management Studio.
2. in arborele Object Explorer, se extinde dosarul Databases.
3. Se extinde dosarul bazei de date, unde va ft creat indexul.
~i non- 4. Se extinde dosarul Tables.
entru a
5. Se face un click-drept pe tabelul ales (fie orarul). in meniul de context, se face un click pe
uite pe
optiunea Design.
6. Apare interfata deja cunoscuta de proiectare in regim de constructor al tabelului.
le tipul
7. Se face un click cu butonul drept al mouse-ului asupra oricarei proprietati a coloanelor.
KEY~i
l, 13]. 8. in meniul de context aparut, se selecteaza optiunea Indexes/Keys....
Pentru a obtine un rezultat similar, se pot omite p~ii 7-8, daca se apasa butonul Manage
·eare m
Indexes and Keys de pe hara de instrumente, ~a cum este prezentat in figura de mai jos:
izic, tot
Crearea tabe/e/or # indeqilor
file _Edit j[iew £.reject ]debug Table Designer Jools ytindow !:!elp
.c . ta . ~"' ..~ blew Query .,'lfil .(f.I f.-1 /Hl • Jt OJ .
" [.(.l ~ -
9. in rezultat, apare o fereastra de dialog Indexes/Keys, separata vertical in doua paqi. Prima din
stanga - Selected Primary/Unique Key or Index: afi~eaza cheile primare sau unice, sau
indec~ii. Se selecteaza una din ele pentru a prezenta proprietatile acesteia in gridul din dreapta.
Daca lista este vida, nici un obiect din acestea nu a fost defmit pentru tabelul dat. in cazul
nostru, In tabelul orarul, deja, exista un index-cheie creat in sectiunea 6. 1.2 in rezultatul
formarii cheii primare asupra tabelului dat. Pentru a crea o entitate noua, se apasa butonul
Add.
Dupa apasarea butonului Add, in fereastra din stanga, apar mai multe optiuni pentru setarea
proprietatilor entitatii create. Pentru a ~terge cheia sau indexul selectat in lista Selected
Primary/Unique Key or Index, se apasa butonul Delete.
Ind exes/Keys ? x
~el ectedPrima ry/Uniqu e Key or Index:
Q.lHii!i ,-.E
. -,·-,i·t-in·----p
mm -- --.....r...o....p.....e...rt
- -- ..-i...e......
s f..o.-
r ..n.....ew .....n.....i..q.....u....e.....k....e...y........o...r....i...n....ci....ex
...........u ....................................... ____.....................................................................,
9
PK_ orarul_SFDESE6D4649125D
v (GeneraO
Col umn s ld_Di >ciplin a (ASC)
I ~ Uni quE No
Type Index
v Id entity
{Name) IX_o rarul
Desc ripti on
v Table Designer
Crt-att ,..,.5 1._: iu~tered r"'"
''-'
• Pad Index - indica daca, in acest index, paginilor intermediare le sunt oferite acel~i
procentaj de spatiu liber (padding) specificat in Fill Factor.
• Ignore Duplicate Keys specifica ce se intampla atunci cand un rand este inserat pe
parcursul operatiei de inserare in bloc ~i valoarea cheii lui este egala cu valoarea cheii
existente. Daca se selecteaza:
• Yes - SQL Server publica un avertisment, ignora randul ~i incearca sa insereze restul
randurilor.
• No - SQL Server publica un mesaj de eroare ~i realizeaza un rollback al operatiei de
inserare in bloc.
• Included Columns: lista de nume ale coloanelor care constituie cheia indexului.
Coloanele pentru subchei pot fi specificate numai pentru indec~i de tip Nonclustered.
Aceasta proprietate este ascunsa pentru indec~ii XML.
• Is Disabled: indica daca indexul este dezactivat. Aceasta este o proprietate numai pentru
citire (read-only). Proprietate ia valoarea Yes, daca indexul a fost dezactivat cu
instrumente ce nu fac parte din Visual Database tools.
• Is Full-Text Key: specifica daca indexul este de tip full-text. Aceasta proprietate este
ascunsa pentru indec~ii XML
• Page Locks Allowed: specifica daca blocarea la nivel de pagina este permisa de acest
index. Permiterea sau anularea bloclirii la nivel de pagina afecteaza performanta bazei de
date. Se recomanda setarea valorii Yes.
• Re-compute Statistics: - specifica daca motorul bazei de date in cauza calculeaza
statistici noi atunci cand este creat indexul. Recalcularea statisticilor incetine~te procesul
de construire a indec~ilor, dar, imbunatate~te performantele interoglirii bazei de date.
• Row Locks Allowed: specifica daca blocarea la nivel de randuri este permisa de acest
index. Permiterea sau anularea bloclirii la nivel de rand afecteaza performanta bazei de
date. Optiunea recomandata este Yes.
10. Pentru finalizarea procedurii, este suficient sa fie inchisa fereastra Indexes/Keys (se aplica un
click pe butonul Close). Controlul se va intoarce ferestrei cu structura tabelului ~i in aceasta
fereastra pentru salvarea modificlirilor in structura indexului se apasa butonul Save de pe hara
de instrumente.
i Pentru a aplica a doua metoda de modificare a unui index utiliziind instrumentele din SQL Server
Management Studio, se parcurge urmatoarea cale:
pe 1. in arborele Object Explorer se extinde dosarul bazei de date, unde se gase~te indexul necesar
ii 2. Se extinde dosarul Tables.
3. Se extinde (se apasa pe semnul + ) nodul tabelului necesar pentru a afi~a componentele
ul acestuia.
4. Se extinde dosarul Indexes
e 5. in lista de indec~i aparuta, se alege indexul necesar ~i se face un click-drept pe acesta, in
meniul de context aparut se alege optiunea Properties
11. 6. in rezultat, apare fereastra de dialog Index Properties. Fereastra Index Properties este
d. separata in doua pfu-ti verticale. in partea stanga se alege pagina, in partea dreapta se afla
cfunpul de lucru, unde se afi~eaza continutul acestei pagini.
ru Alegiind o pagina sau alta din lista din stiinga, se afi~eaza grupul de optiuni necesare, unde in
mod visual bifiind butoane sau selectiind din meniuri derulante valori dezirabile se seteaza
parametrii necesari pentru index. Setarile accesibile pentru editare in fereastra Index
te Properties sunt similare celor din fereastra Indexes/Keys din interfata Table design .
Fereastra Index Properties poate fl folosita ~i pentru crearea indec~ilor noi. in acest caz, dupa
st punctul 3 din scenariu de mai sus urmeaza un click-drept pe dosarul Indexes ~i in meniul de context se
le alege optiunea New Index ...
!ll SQLQuery1 .sql - MV.... versitatea (sa (62) ) ~ -ti X Object Explorer Details queries for Lab-05.sqL..iversitatea (sa (6
:a USE univers itatea
·a GO
DROP INDEX IF EXi~TS I X or ar ul ON orarul ,
GO
CREATE INDEX ix or aru l ON or arul I d_Di s cip li na , Id_Profe sor
GO
-CREATE NONCLUSTERED INDEX i x_or aru l _b l oc ON orar ul •Bl oc ASC
WHERE Bloc = 'B'
WITH SORT _IN_ TEMPDB = ON ,
PAD INDEX = ON
FILLFACTOR .,. 90 .
DROP EXISTING ON
a GO
-EXEC sp_he l pindex or aru l :
121 % •
A doua instructiune, care constituie indexul numit ix_ orarul_ bloc, poseda mai multe proprietati
declarate explicit. Valorile campului Bloc sunt ordonate in mod ascendent. Indexul creat este de tipul
NONCLUSTERED ~i este, in acel~i timp, FILTERED cu un predicat In calitate de criteriu de filtrare
pentru coloana Bloc, care trebuie sa fie diferita de valoarea 'B'. Suplimentar, pentru indexul
ix_orarul_bloc, este explicit definita valoarea pentru FILLFACTOR ~i sunt activate asemenea optiuni, ca
PAD_INDEX, SORT_IN_ TEMPDB, DROP_ EXISTING.
Activarea parametrului SORT_IN_TEMPDB indica faptul ca, pentru construirea indexului, sistemul
va utiliza tabelul tempdb, pastrand in acesta rezultatele intermediare de sortare. Aceasta proprietate este
utila cand fi~ierele bazei de date se afla pe discuri fizice diferite.
La acest index, este adaugata clauza DROP_ EXISTING, care, in procesul crearii acestuia, verifica
daca pentru tabelul respectiv nu mai exista un index cu acest nume ~i il ~terge in caz afirmativ. Evitand
posibilele erori, aceasta clauza este utila, daca e nevoie de reconstruirea indexului. Daca indexul cu astfel
de nume inca nu exista in sistem, clauza DROP_ EXISTING va e~ua.
Deseori cu scopul de a optimiza utilizare resurselor hard indec~ii sunt plasati in fi~iere diferite de
cele unde sunt tabelele utilizatorului. in exemplu de mai jos este creat un index cu indicarea explicita
grupului de fi~iere a bazei de date unde va fi plasat index.
USE universitatea
GO
ALTER INDEX ix orarul ON orarul REBUILD;
Instructiunea de reconstruire a indexului de mai jos contine parametrul ALL, fapt ce permite
reconstruirea tuturor indec~ilor asociati tabelului cu optiuni specificate explicit dupa clauza REBUILD
WITH ...
USE universitatea;
GO
ALTER INDEX ALL ON orarul
REBUILD WITH (FILLFACTOR = 80, STATISTICS_NORECOMPUTE=ON);
Indexul poate fi dezactivat, dar definitiile lui sa ramana m metadate. Dezactivand un index de tip
Clustered, se dezactiveaza accesul catre tabelul respectiv. Indexul dezactivat poate fi activat din nou prin
reconstruirea indexului. Daca este nevoie de dezactivat un index, instructiunea, in acest caz, va fi similara
exemplului de mai jos:
USE universitatea;
GO
ALTER INDEX ix orarul bloc ON orarul DISABLE;
oprietati SQLQuery3.sql - MV .... versitatea (s:a (53))* -P X queries for Lab05.sqLiversitatea, {sa Ci1})
de tipul
filtrare . ._ .:- EXEC sp_helpindex grupe ;
indexul
121 % T
tiuni, ca
Im Results ~'i Messages
6.4.1. lnstructiunea
, INSERT
Este evident ca, daca pot fi create tabele prin cod, pot fi ~i inserate date prin cod. Datele pot fi
inserate lntr-o linie intreaga sau o parte a acesteia. Campurile care poseda proprietatea NOT NULL trebuie
sa fie populate obligatoriu pentru a evita erorile logice.
Pentru inserarea datelor, se utilizeaza instructiunea INSERT. Sintaxa de baza a acestei instructiuni
rietatilor este:
limbajul
INSERT [INTO] <nume tabel> [(<coloanal> [, <coloana2> ... ])]
{VALUES (<expresiel> [,<expresie2> ... ])
!<SELECT ... FROM ... >
};
Argumentele folosite sunt:
• <nume tabel> - numele tabelului la care sunt adaugate inregistrarile;
permite • [(<coloanal > [, <coloana2> ... ]) - lista coloanelor pentru care se introduc valori;
IBUILD • (<expresiel > [, <expresie2> ... ]) - sunt valorile asociate expresiilor In ordinea coloanelor;
• <SELECT ... FROM ... > - interogare SELECT.
intre valori ~i numele de coloane, trebuie sa existe o corespondenta biunivoca. Lista de coloane
poate sa lipseasca, daca se introduc valori in toate coloanele tabelului, dar, in aceasta situatie ordinea
valorilor introduse trebuie sa respecte ordinea coloanelor.
Coloanele pot fi precizate in orice ordine, insa trebuie asigurata corespondenta intre numele
x de tip coloanelor ~i valorile furnizate. in afara de aceasta, dimensiunile datelor introduse trebuie sa fie mai mici
10U prin sau egale cu dimensiunea maxima a coloanei in care se insereaza. Prin forma INSERT ... VALUES, se
similara introduce in tabel o singura inregistrare. Cu ajutorul valorii NULL, se pot introduce valori nu le.
Exista ~i a doua forma de inserare a datelor in tabele.
Se scrie instructiunea INSERT cu ajutorul unei interogari SELECT. in acest caz, nu se utilizeaza
clauza VALUES. Totodata, intre clauza INSERT ~i interogarea SELECT, trebuie sa existe compatibilitate
de tip, numar ~i ordine intre lista de valori ~i lista de campuri corespondente din tabel.
stocata
ie sa fie
Crearea tabelelor ~i indeqilor
~LQuerylsql - MV.... versitatea (sa (53))' -IO X queries for lab05.sql... 1versitatea (s;a Ci1)) Object Explorer Details
_ -CREATE TABLE orarul_grupa ( Id_Di scipl ina INT, Cod_Grupa CHAR ( 6 , Zi CHAR; 2. ).
Ora TIME , Auditoriu INT_, Bloc CHAR · 1 DEFAULT ( 'B' );
INSERT orarul_grupa ( Id_Disciplina , Cod_Grupa , Ora ,, VALUES • l05 , 'CIB171' . '08:00' ' .•
INSERT orarul_grupa DEFAULT VALUES ;
INSERT orarul_grupa VALUES { 112 , 'INF171 ', 'Lu' , '11 : 30' > 501 , 'C' ,
121 % •
~il Messages
( l r aw affected )
~ 1 r ow affected )
(1 r e \'/ affect e d )
SQLQuery1 .s:ql - MV .... versitatea (s.a (&2:))* -lJ X queries for Lab-0~.sql... iversrtat
- [::~ S E L EC T ~ FROM orarul_grupa ;
121 %
ml Results , ~ Messages
Id _Disciplina Cod _Grupa Zi Ora Auditoriu Bloc
L5§~·" " " " " " " " " " " "J
CIB171 NULL {}8:00:00.0000000 NULL B
.2 t·JULL NULL NULL NU LL t~ULL B
). 11 2 IN F1 71 Lu 11 :30:00.0000000 501 c
Interogarea construita solicita sa fie afi~ate toate coloanele tabelului orarul_grupa. Dupa actionarea
butonului Execute, se obtine rezultatul din fereastra de mai sus.
Se afi~eaza inca un exemplu, acum cu un argument nou in instructiunea CREA TE:
Crearea tabelelor ~; indeqilor
~ 1 r ow aff e c t: ed )
( 1 r c >i a .f f e ci: ed }
M9g 547, :eve: 16 , S t a te ~ , ~ ~ n e 9
The Il~S E R: 9tacemen.t can.fl .:.. c t e d. w:..1;h t he :Ht:CK c:instra1nt. u::K _ orarul_gru Elcc 1EA~EE5.S".
: be :-cnf : .:ct cccur r ed :.n datab a se "u:!::..ve:r:sit;at.=·c..'' r t:able: "d.D~, ~ ::ra r u.l grupa: t', .~:::.:::..:irr.n '3:.c c'.
The s tat e me nt has b ee n term.:..~a te d .
plina,
(2 r c>is affe ci: ed )
plina,
Urmeaza descrierea tuturor instructiunile din exemplul de mai sus:
1ctura • Chiar de la inceput se observa o schimbare, instructiunea DROP TABLE, care are functia de a
L, iar suprima tabelului orarul_grupa.
• Mai departe, se creeaza din nou tabelul-test orarul_grupa cu acel~i chema ca ~i in exemplu
Ce se precedent. Cu o singura deosebire, in structura acestui tabel, este introdusa o alta noutate: pentru
tlorile campul Bloc este inserata clauza CHECK care accepta pentru acest camp valori constante dintr-
o lista data, adica 'A', 'B', 'C'. Valoarea implicita pentru acest camp este 'B'.
• In continuare, sunt formulate o serie de instructiuni INSERT. Instructiunea a treia INSERT face
tentativa de a insera o inregistrare noua cu valoarea 'D' pentru atributul Bloc, care nu este
definita in clauza CHECK. Aceasta linie va fi respinsa in mod automat de SQL ~i, precum se
poate observa, sistemul a generat un mesaj de eroare, prezentat in fereastra de rezultate. Prin
urmare, au fost confirmate de SQL numai primele doua instructiuni INSERT.
• in final, este scrisa instructiunea SELECT, care afi~eaza toate inregistrarile tabelului construit.
Se construie~te un alt exemplu, folosind instructiunile ALTER ~i INSERT.
5QLQuery4.sql - MV .... versitatea (sa (67)) • ;:i X queries for Lab05.sql.•.iversitatea (Sil (61))" Object Explorer Details
-ALTER TABLE orarul_grupa ADD Id_Or aru l_Grupa INT - r ___ IDENTITY 1 . 1 ,
2 ALTER TABLE orarul_grupa ADD Data i nserare DATETIME 'HT ~ ,,'L , DE FAULT<'.GETDATE ());
Exemplul introduce mai multe elemente in ceea ce prive~te instructiunea ALTER TABLE. Astfel, se
solicita crearea noilor campuri:
• Id_ Orarul_ Grupa, care nu poate fi nul ~i este generat automat de clauza IDENTITY, pomind de
la numarul 1 ~i avand o cre~tere de +1 la fiecare inregistrare noua.
• Data_inserare, care nu poate poseda valori necunoscute, este generata automat prin atribuirea
rezultatului functiei GETDATEO, care returneaza data ~i ora sistemului.
Comenzile INSERT sunt urmate de o instructiune de afi~are a tabelului.
Dupa cum se vede din rezultatele returnate de instructiunea SELECT din imagine, prirnele 2 randuri
sunt datele inserate din exemplul precedent, iar ultimele 2 randuri sunt datele inserate In ultirnul exemplu.
Prezinta interes 2 coloane noi adaugate. Campul Id_ Orarul_ Grupa populeaza in mod automat randurile
existente ~i cele noi adaugate cu valori intregi aranjate in ordinea crescatoare. Campul Data_inserare
poate fi folosit in calitate de identificator pentru a urmari tirnpul cand a fost creata inregistrare.
Daca intr-un tabel se introduc linii in INSERT prin intermediul unei subinterogari, coloanele din
lista SELECT trebuie sa corespunda, ca numar ~i tip, celor precizate in clauza INTO. in absenta unei liste
de coloane in clauza INTO, subinterogarea trebuie sa furnizeze valori pentru fiecare coloana a obiectului
destinatie, respectand ordinea in care acestea au fost definite. Astfel, este posibil sa se copieze mai multe
inregistrari dintr-un tabel intr-unul sau mai multe tabele.
Se presupune ca exista un tabel orarul_ CIB171, care are acee~i structura ca ~i tabelul orarul. Sa se
insereze, In acest tabel, datele grupei Id_ Grupa=]. Instructiunea va avea forma:
6.4.2. lnstructiunea
, UPDATE
Instructiunea UPDATE permite actualizarea valorilor coloanelor dintr-una sau mai multe linii ale
unui tabel. Modificarea datelor dintr-un tabel utilizeaza una din formele sintactice ale comenzii:
SQLQuerttsql - MV .... versitatea (sa. (67))' -P X queries for l.ab-05.sqLiversitatea (sa (61))* 0 -ect Explorer
- UPDATE orarul_grupa SET Zi = 'Ma' viHERE Zi IS NULL ;
SELECT Id_Disciplina , Cod_Grupa 1 Zi ; Ora , Bloc FROM orarul_grupa .;
121 % •
~'i Results
( 2 rows affec>;;ed }
Id_Dis ci~lina Cod Grupa Z~ Cra Bloc
( 4 rcw.s affected)
in structura acestei instructiuni, pentru prima data, este folosit cuvantul rezervat UPDATE, care
g!te~te tabelul
pentru suportarea unor modificari.
in continuare, se observa ca este modificat cfunpul Zi cu continutul 'Ma' pentru toate inregistrarile
care campul Zi este necunoscuta. ~i, in sfiir~it, este solicitata afi~area tuturor inregistrarilor pentru cele 5
loane ale tabelului orarul_grupa.
Rezultatul comenzii SELECT este prezentat sub forma de text. Acest model de vizionare poate fi
daca se apasa butonul Results to text.
Precum se poate vedea, modificarea datelor unui tabel este destul de simpla, daca se face abstractie
conditiile impuse de clauza WHERE. Astfel, rezultatul aceleia~i instructiuni, fara clauza WHERE, este
zentat in urrnatoarea fereastra:
SQLQuery4.sql - MV .... versitatea (sa (f>7))* -P X uerfes for Lab05.sql... iversitatea (sa (61)) Object Explorer
.. - UPDATE oraru l_grupa SET Bloc = 'A' ;
!. SELECT Id_Discipli na , Cod_Grupa , Zi , Ora , Bloc FROM orarul_grupa ;
~4 rows affect.ed }
(4 rc1-1s affected)
in structura instructiunii, lipse~te clauza WHERE, care actioneaza in calitate de filtru. in acest caz,
~ toate inregistrarile in co Joana Bloc au luat valoarea egala cu 'A'.
Crearea tabelelor ~i indec~ilor
.
6.4.3. /nstructiunea DELETE
in bazele de date, din operatiile de actualizare, ill afara de inserare ~i modificare a liniilor,
face parte ~i operatia de eliminare a continutului uneia sau mai multor linii.
Instructiunea DELETE permite ~tergerea liniilor dintr-un tabel ~i are urmatoarea sintaxa:
SQLQuery4.sql - MV .... versitatea (sa (67))* -P X queries for labOS.sqLiversitatea (sa (61)) Object Explorer Detail
- DELETE FROM or arul_grupa vJHER.E · zi ~: 'Ma' ;
~ SELECT • FROM orarul_grupa ,
121 %
Instructiunea DELETE determina ~tergerea, din tabelul orarul_grupa, tuturor inregistrarile in care
ciimpul Zi este egal cu 'Ma'.
Iata ciiteva puncte de care trebuie sa se tina cont in utilizarea instructiunii DELETE:
• Instructiunea DELETE este mai sigura tranzactional, dar este mai lenta deciit instructiunea
TRUNCATE TABLE, deoarece TRUNCATE TABLE ~terge un tabel ~i il recreeaza.
• in cazul instructiunii DELETE, liniile ~terse pot fi returnate, spre deosebire de utilizarea
instructiunii TRUNCATE TABLE.
• Declan~atoarele ON DELETE nu sunt invocate, deoarece TRUNCATE nu utilizeaza
instructiunea DELETE.
intrebari de control
1. Sintaxa de baza a instructiunii CREATE TABLE.
2 Sintaxa de baza a instructiunii ALTER TABLE.
3. Sintaxa de baza a instructiunii INSERT.
4 Sintaxa de baza a instructiunii DELETE.
5. Sintaxa de baza a instructiunii UPDATE.
6 Deosebirea dintre instructiunile DELETE ~i TRUNCATE TABLE.
7. Tipuri de indec~i acceptati de MS SQL Server 201 7.
8. Sintaxa de baza a instructiunii CREATE INDEX
Crearea tabelelor lji inde9ilor
Sarcini practice:
1. Sa se scrie o instructiune T-SQL, care ar popula co Joana Adresa_ Postala_ Profesor din tabelul
profesori cu valoarea 'mun. Chisinau', unde adresa este necunoscuta.
2. Sa se modifice schema tabelului grupe, ca sa corespunda urmatoarelor cerinte:
a) Campul Cod_ Grupa sa accepte numai valorile unice ~i sa nu accepte valori necunoscute.
b) Sa se tina cont ca cheie primarii, deja, este definitii asupra coloanei Id_ Grupa.
3. La tabelul grupe, sa se adauge 2 coloane noi Sef_grupa ~i Prof_Indrumator, ambele de tip
INT. Sii se populeze campurile nou-create cu cele mai potrivite candidaturi ill baza criteriilor
de maijos:
a) $eful grupei trebuie sa aiba cea mai buna reu~itii (medie) din grupa la toate formele de
evaluare ~i la toate disciplinele. Un student nu poate fi ~ef de grupa la mai multe grupe.
b) Profesorul fndrumator trebuie sa predea un numiir maximal posibil de discipline la grupa
data. Daca nu existii o singurii candidaturii, care corespunde primei cerinte, atunci este
ales din grupul de candidati acel cu identificatorul (Id_Profesor) minimal. Un profesor nu
poate fi illdrumator la mai multe grupe.
c) Sii se scrie instructiunile ALTER, SELECT, UPDATE necesare pentru crearea coloanelor
in tabelul grupe, pentru selectarea candidatilor ~i inserarea datelor. .
4. Sa se scrie o instructiune T-SQL, care ar mari toate notele de evaluare ~efilor de grupe cu un
punct. Nota maximala (10) nu poate fi miirita.
5. Sa se creeze un tabel profesori_new, care include urmatoarele coloane: Id_Profesor,
Nume_ Profesor, Prenume_ Profesor, Localitate, Adresa_ 1, Adresa_ 2.
a) Coloana Id_Profesor trebuie sa fie definita drept cheie primara ~i, ill baza ei, sa fie
construit un index CLUSTERED.
b) Campul Localitate trebuie sa posede proprietatea DEFA ULT= 'mun. Chisinau'.
c) Sa se insereze toate datele din tabelul profesori ill tabelul profesori_new. Sa se scrie, cu
acest scop, un numiir potrivit de instructiuni T-SQL. Datele trebuie sa fie transferate in
felul urmator:
Coloana-sursa Coloana-destinatie
Id Profesor Id Profesor
Nume Profesor Nume Profesor
Prenume Profesor Prenume Profesor
Adresa Postala Profesor Localitate
Adresa Postala Profesor Adresa 1
Adresa Pasta/a Profesor Adresa 2
in coloana Localitate sii fie inserata doar informatia despre denumirea localitiitii din
coloana-sursa Adresa_Postala_Profesor. in coloana Adresa_l, doar denumirea striizii. in
coloanaAdresa_2, sii se piistreze numiirul casei ~i (posibil) a apartamentului.
6. Sa se insereze datele in tabelul orarul pentru Grupa= 'CIBJ 71' (Id_ Grupa= 1) pentru ziua de
luni. Toate lectiile vor avea loc ill blocul de studii 'B'. Mai jos, sunt prezentate detaliile de
inserare:
(ld_Disciplina = 107, Id_Profesor= 101, Ora ='08:00', Auditoriu = 202);
(Id_Disciplina = 108, Id_Profesor= 101, Ora ='11:30', Auditoriu = 501);
(ld_Disciplina = 119, Id_Profesor= 117, Ora ='13:00', Auditoriu = 501);
7. Sii se scrie expresiile T-SQL necesare pentru a popula tabelul orarul pentru grupa INFl 71 ,
ziua de luni.
Crearea tabelelor ~i indec~ilor
Object Explorer
Connect - ¥ x;; --------
[ studentL~~l:'~it~ . studenti
,-. i5 MV (SQL Server 14.0.1 0C-D.1 69 - sa)
[ )J ld_Student )J ld_Stu dent
Databases
System Databa ses I )/ ld_Disciplina Num e_Student
Database Snapshots I )J ld_Profeso r Prenume_Student
:p ii Adventure\>'lo rlcs2017
! )/ ld_Grupa Dal a_Na stere_Stu cl ent
ii universitatea
,__ Database Diagram s )/ Ti p_Evaluare Adresa_P mtal a_St ud ent
~ [1' **Z:!:L -:~m-~:·~~~".'.
1.t -
Tables
System Tables
~::_,,.,"':_ "___ j
r ; 1.. T .. l..I ...
3. Se face un click cu butonul drept al mouse-ului asupra oricarei pfu1i libere a ariei de lucru ~i, in
meniul de context, se selecteazii optiunea Add Table.
4. in fereastra aparutii, deja cunoscutii, intitulatii Add Table, se selecteaza ~i cele 3 tabele din
schema bazei de date - grupe, profesori, discipline.
5. Apoi ramane doar sii se aplice un click pe butonul Add. Diagrama obtinuta va fi similarii celei
de mai sus.
Diagrame, scheme# sinonime
- 6. Se poate observa, ca legaturile dintre unele tabele deja exista. Acest lucru se explica prin faptul
ca la crearea schemei bazei de date deja erau definite constrangerile respective. Daca
constrangerile referentiale nu sunt definite din start in schema bazei de date, acest lucru poate
fi realizat, apeland la interfata de creare a diagramelor. Astfel, pentru editarea sau crearea unei
legaturi, fie intre tabelul grupe ~i studenti_reusita, este de ajuns sa se aplice un click pe
coloana care se gase~te la stanga numelui cfunpului unui tabel (grupe) ~i sa se gliseze pana la
pozitia respectiva din tabelul (studenti_reusita) cu care se va lega. Odata cu finalizarea
procesului de glisare, pe ecranul calculatorului apare urmatoarea fereastra:
?-
nt
rrpul de
l _ I
OK Cancel eel
or
General
Expandati pentru a prezenta Check Existing Data on Creation or RE-Enabling ~i Tables and
Columns Specifications
• Check Existing Data on Creation or Re-Enabling: verifica datele din tabel inainte ca
constrangerea sa fie creata sau reactivata.
ru ~i, in • Tables and Columns Specifications Category
Expandati pentru a prezenta care coloane din care tabele joaca rolul de cheie extema sau
Jele din primara (sau unica) in legatura. Pentru a modifica sau defini aceste valori, se aplica un click
pe butonul din cfunpul respectiv, ... .
tra celei
• Foreign Key Base Table: arata care tabel confine coloana ce joaca rol de cheie extema
in legatura selectata.
• Foreign Key Columns: arata care coloana joaca rol de cheie extema in legatura
selectata.
Diagrame, scheme# sinonime
• Primary/Unique Key Base Table: arata care tabel confine coloana ce joaca rol de cheie
primara (sau unica) in legatura selectata
• Primary/Unique Key Columns: arata care coloana joaca rol de cheie primara (sau
unica) in legatura selectata.
Database Designer
• Enforce For Replication: indica daca se aplica constrangerea in cazul cand agentul de
replicare executa o inserare, modificare sau ~tergere in tabelul dat.
• Enforce Foreign Key Constraint: se specifica daca este sau nu permisa modificarea datelor
in coloanele legaturii, in cazul in care aceste modificari invalideaza integritatea constrangerii
referentiale. Sa se aleaga optiunea Yes, daca nu se dore~te astfel de modificari ~i No, in caz
contrar. In cazul nostru, se alege Yes.
• INSERT and UPDATE Specification
Expandati pentru a vizualiza informatia despre Delete Rule ~i Update Rule a legaturii.
• Delete Rule: se specifica ce se intampla, daca un utilizator incearca sa ~tearga un rand
de date implicat lntr-o legatura de tip cheie extema.
• No Action: are loc un roll-back ~i apare un mesaj de eroare care comunica
utilizatorului ca ~tergerea nu este permisa.
• Cascade: se ~terg toate randurile ce contin date implicate in legatura cheii exteme.
• Set Null: se seteaza valoarea NULL, daca toate coloanele cheii exteme din tabel pot
accepta aceasta valoare.
• Set Default: se seteaza valoarea implicita, daca toate coloanele cheii secundare din
tabel au definite valori implicite.
• Update Rule: se specifica ce se intampla, daca un utilizator incearca sa modifice un rand
de date implicat lntr-o legatura de tip cheie extema.
• No Action: are Joe un roll-back ~i apare un mesaj de eroare care comunica
utilizatorului ca ~tergerea nu este permisa.
• Cascade: se ~terg toate randurile ce contin date implicate in legatura cheii externe.
• Set Null: se seteaza valoarea NULL, daca toate coloanele cheii exteme din tabel pot
accepta aceasta valoare.
• Set Default: se seteaza valoarea implicita, daca toate coloanele cheii secundare din
tabel au definite valori implicite.
Identity
Expandati pentru a afi~a proprietatile campurilor Name ~i Description
• Name: indica numele legaturii. Daca o noua legatura este creata, se asociaza un nume
implicit bazat pe tabelul din fereastra activa Table Designer. Numele poate fi modificat.
• Description: descrie legatura. Pentru o descriere mai detaliata, se aplica un click pe
Description ~i apoi un click pe butonul .. . . Aceasta ofera o suprafata pentru inserarea
textului.
·-1-
Diagrame, scheme §i sinonime
gentul de • (General}
Check Existing Data On Creation Or Re-Enabling Yes
i1 Tables And Colurnm Specification
ea datelor
AO~~
strangerii
Enforce For Replication Yes
No, 'in caz
Enforc: Forei9n Key Co_n ~t~?~n_t_ _ _ _ _ . ~-es
" INSERT And UPDATE Specification
• Identity
rii. (Name) FK_studenti_reusita_grupe
a un rand
comunica
OK Cancel
J
exteme.
n tabel pot
9. Dupa setarea proprietatilor legaturilor, se apasa OK. in caz concret, tabelul studenti_reusita
este legat cu tabelul discipline, studenti, profesori ~i grupe (legatura de tipul 1:m). Rareori,
undare din doar in practica sunt cazuri cand, in 2 tabele diferite, coincid cheile primare, atunci legatura
este de tipul 1: 1.
ce un rand 10. Dupa modificarile executate, pentru a le salva se apasa butonul Save. Ca urmare, apare
fereastra care ne informeaza despre faptul ca schimbarile operate in schema bazei de date vor
fi salvate.
comunica
7.1.3. Modificarea formei de vizualizare a tabelelor
externe. Diagrama bazei de date afi~eaza tabelele in forma de dreptunghiuri, in care sunt incluse denumirile
n tabel pot de coloane ale tabelelor. Apeland la meniul de context, formatul de prezentare a tabelului poate fi
modificat. Pentru a realiza aceasta sarcina, se procedeaza precum urmeaza:
1. Se aplica un click cu butonul drept al mouse-ului asupra barei de titlu a tabelului.
undare din
2. in meniul de context, se selecteaza optiunea Table View.
3. Apoi se trece la optiunile meniului suspendat ~i se actioneaza, in functie de necesitati, una din
ele. Exista 5 optiuni de afi~are a tabelelor disponibile .
. un nume
""'"'~~~~-~~~~~~~·.,
ificat.
Table View
i click pe \I ld_Grupa
t inserarea
Cod_ Grupa
Specialitate
Nume_Facultate
tii Delete Table:; from Database
tli Remove from Diagram
,:...,.:...i.l
8\i3
1
Autosize SelectE:d Tab!E:s
Diagrame, scheme# sinonime
• Optiunea Standard prezinta un grid cu toate coloanele tabelului ~i proprietatile lor. in figura ce
urmeaza, optiunea Standard este aplicata asupra tabelului grupe:
i reusita
dent
..Column Name Data Type Allow Null5
::iplina Id_ Grupa smallint D
fesor Cod_ Grupa char(6) D
pa Specialitate varchar(255) ~
·aluare Nume_Facultate varchar(2 55) E~J
D
:valuare
• Optiunea Column Names prezinta numai numele tuturor . coloanelor. Atunci cand un tabel
existent este adaugat la diagrama, el apare in acest format:
1sita
'lJ ld_Grupa
Cod_ Grupa
Specialitate
Nume_Facultate
in
• Optiunea Keys prezinta un grid, ce contine numele tuturor coloanelor, care fac parte din cheia
primara, cheile exteme sau care au caracteristica UNIQUE: ~i
uti
ce
me
--reusita
m
'.!'.... ' .•,;lrl-•.,,;,-.-~"'~· , -,''h . :;,>, . : ,,,, .*'.«. ,";.,.-••.-.-~, ..... ''• "· ... : .,,-,.;'<'>'•'·t</VW,,,yv;.,'.,.;.""'""••·••• :; ••-~
SUS
dat
obi
Diagrame, scheme# sinonime
gura ce • Optiunea Name Only prezinta numai hara de titlu cu numele tabelului. in figura de mai jos,
tahelul grupe este prezentat in urma actiunii optiunii Name Only:
reusita
:::nt
::ilina
.. r:,-ir
~ ·
!USita !
un tabel Column Name . Condensed Type Nullable
na v Id_ Grupa small int No
Cod_ Grupa char(6) No
Spec i a Iitate va re ha r(.25-5) Yes.
Jare
Trehuie mentionat ca proprietatile care vor fi afi~ate in forma de prezentare Custom pot fi definite
in acel~i meniu, optiunea Modif.Y Custom ..
~chema name:
schema_universttatea 1
Sg_hema owner:
Ion Sea[Ch ..
Connection
Server:
MV
Connection:
sa
Progress
Ready
OK Cancel
Schema - New - 0
n."'
Select a ~
rJ' Script ... · Help
J; General
JI Perm1ss1ons
JI Extended Pm , --l.--- ---·"'·'-··.1_,.._i.. ___ -1...=--"- -· ·-i... --"'-L. 1-· ·"·-···- --..1....i.---.J -----...1···-·- A.sd!ema 01A•ner
Search Rotes and Users
+" ==
Select these object types:
Matchu1g objects :
[J :.
D :.
[J :.
[~] :.
Name
[dbo]
[guest}
(INFORMATION_SCHEMA]
!Ion]
Type
User
User
User
User
I'<
e0
[] :i fpublic] Database r ...
Help
[J :. [sys] User
"
OK Cancel Help
OK Cancel
10. Dupa ce numele schemei ~i proprietarul acesteia este definit, se apasa butonul OK ~i schema
va fi creata.
Proprietar al schemei poate deveni orice utilizator, rol sau aplicafie care are acces la baza de
date. Un utilizator poate detine mai multe scheme, insa numai o schema poate fi implicita.
Daca in calitate de proprietar al schemei este definit un rol sau un grup Windows, atunci
schema poate fi detinuta paralel de cativa utilizatori.
USE universitatea;
GO
DROP TABLE IF EXISTS orarul_grupa;
GO
CREATE SCHEMA schema universitatea2 AUTHORIZATION Ion
CREATE TABLE orarul_grupa(Id_Disciplina INT,Cod_Grupa CHAR(6) ,
Zi CHAR(2), Ora TIME, Auditoriu INT, Bloc CHAR(l))
GRANT SELECT ON SCHEMA: : schema universitatea2 TO Anna
DENY SELECT ON SCHEMA:: schema universitatea2 TO Vasile
GO
Seledapage
rJ Scnpt ... Help
JI General
JI Permissions
JI Extended Properties Qatabase : urnversrtatea
Name Type
, . . . . . . . . .... ... .... .. .. .. .. ... ................ .......................................................................................................... .... '
~ .Arna User
~ Vasile User
Connection
Ready
Select Ion ~ ~ LJ
Take ownership ti
11.....-b+ ....
,., i_ J
'i ,....., ..,
OK Cancel
Diagrame, scheme §i sinonime
Pentru setarea mai detaliata a accesului la schema, se executa unnatoarea serie de pa~i:
1. in partea dreapta a ferestrei Schema properties In lista Select a page, se alege pagina
Permissions
2. Pentru adaugarea accesului explicit unui utilizator sau rol, se apasa butonul Search . in
consecinta, se va deschide fereastra de dialog Select Users and Roles.
3. Se insereazii numele utilizatorului sau al rolului. Numele se separa prin punct ~i virgula. Pot fi
introduse ~i nume incomplete, apoi se face un click pe butonul Check Names pentru
completarea acestora. Dupa aceasta, se apasa OK.
4. in rezultat, utilizatorii apar 'in tabelul Users or roles. Selectand utilizatorul respectiv ill tabelul
Users or roles, pot fi editate permisiunile de acces detaliate J:n tabelul de mai jos Permissions
for ...
5. Dupa executarea modificarilor, se apasa OK.
Trebuie mentionat ca schema nu poate fi redenumita. Drept solutie, ill acest caz, se creeazii o
schema noua cu un alt nume.
USE universitatea;
GO
ALTER SCHEMA schema universitateal TRANSFER dbo.discipline;
GO
Pentru a ~terge o schema in interfata SQL Management Studio, se parcurge urmatoarea cale:
esta se 1. in arborele de obiecte Object Explorer se face un click-drept pe pictograma schemei care
'ace un trebuie ~tearsa.
ies. in 2. in meniul de context aparut, se alege optiunea Delete.
:tiv.
3. in rezultat, apare o fereastra de dialog Delete Object, unde pentru a confirma ~tergerea schemei
se apasa butonul OK.
4LTER Instructiunea Transact-SQL de ~tergere a unei scheme are urmatoarea forma generala:
'entativa
Diagrame, scheme §i sinonime
Synonym schema :
Seryer name :
.Qatabase name:
Scb.ema:
Object type :
Qbject name: v
Connection
Server:
MV
Connection :
MV'rnarian
' Progress
Read1·
OK Cancel
CREATE SYNONYM [ nume schema 1. ] nume sinonim FOR < obiect >
< obiect > :: =
{
[ nume_server.[nume_baza_de_date].[nume_schema_2].nume_obiect
I nume baza_de_date. [nume_schema_2]. I nume_schema_2.] nume_obiect
}
Diagrame, scheme# sinonime
• nume_schema_ I - specifica schema pentru care acest sinonim a fast creat. Daca schema nu
este specificata, atunci sistemul utilizeaza schema implicita a utilizatorului curent.
• nume sinonim - este numele sinonimului nou.
• nume_server - este numele serverului pe care este stocat obiectul de baza.
• nume_ daza_de_ date - e numele bazei de date, in care se afla obiectul de baza. Daca
nume_daza_de_date nu este specificat, atunci este utilizat numele bazei de date curente.
• nume- schema- 2 - este numele schemei obiectului de baza. Daca numele schemei nu este
specificat, atunci este utilizat numele schemei implicite a utilizatorului curent
• nume obiect - este numele obiectului de baza la care se refera sinonimul creat.
Urmatorul exemplu, mai intai, creeaza un sinonim ore pentru obiectul de baza, orarul_grupa din
baza de date universitatea, apoi interogheaza baza de date, utilizand sinonimul creat.
USE universitatea;
GO
CREATE SYNONYM ore FOR
universitatea.schema_universitatea2.orarul_grupa;
GO
SELECT * FROM ore;
intrebari de control:
I. Cu ce scopuri se folosesc diagramele in bazele de date SQL Server?
2 Avantajele utilizarii schemelor.
3 Sintaxa de baza a instructiunii de creare a schemei.
4 Constrangerile posibile asupra deplasarii obiectelor dintr-o schema in alta ~i asupra ~tergerii
schemelor.
5 Avantajele utilizarii sinonimelor.
6 Sintaxa de baza a instructiunii de creare a sinonimelor.
Diagrame, scheme §i sinonime
Sarcini practice:
1. Creati o diagrama a bazei de date, folosind fonna de vizualizare standard, structura careia este
descrisa la inceputul sarcinilor practice din capitolul 4.
2. Sa se adauge constrangeri referentiale (legate cu tabelele studenti ~i profesori) necesare
coloanelor Sef_grupa ~i Prof_Indrumator (sarcina3, capitolul 6) din tabelul grupe.
3 La diagrama construitii, sa se adauge ~i tabelul orarul definit in capitolul 6 al acestei lucrari:
tabelul orarul contine identificatorul disciplinei (ld_Disciplina), identificatorul profesorului
(Id_Profesor) ~i blocul de studii (Bloc). Cheia tabelului este constituita din trei cfunpuri:
identificatorul grupei (Id_ Grupa), ziua lectiei (Z1), ora de inceput a lectiei (Ora) , sala unde
are loc lectia (Auditoriu).
4. Tabelul orarul trebuie sa contina ~i 2 chei secundare: (Zi, Ora, Id_ Grupa, Id_ Profesor) ~i
(Zi, Ora, ld_Grupa, ld_Disciplina).
5. in diagrama, de asemenea, trebuie sa se defineasca constrangerile referentiale (FK-PK) ale
atributelor ld_Disciplina, ld_Profesor, Id_ Grupa din tabelului orarul cu atributele tabelelor
respective.
6. Creati, in baza de date universitatea, trei scheme noi: cadre_didactice, plan_studii ~i studenti.
Transferati tabelul profesori din schema dbo in schema cadre didactice, tinand cont de
dependentelor definite asupra tabelului mentionat. in acela~i mod ~ se trateze tabelele orarul,
discipline care apartin schemei plan_studii ~i tabelele studenti, studenti_reusita, care apartin
schemei studenti. Se scrie instructiunile SQL respective.
7. Modificati 2-3 interogari asupra bazei de date universitatea prezentate in capitolul 4 astfel ca
numele tabelelor accesate sa fie descrise in mod explicit, tinand cont de faptul ca tabelele au
fost mutate in scheme noi.
8. Creati sinonimele respective pentru a simplifica interogarile construite in exercitiul precedent
~i reformulati interogarile, folosind sinonimele create.
Administrarea viziunilor ~i a expresiilor-tabel
este
8. ADMINISTRAREA VIZIUNILOR SI A EXPRESllLOR-TABEL
esare '
Capitolul trateaza problematica cu privire la crearea viziunilor cu ajutorul subsistemului View
crari: Designer, salvarea ~i vizualizarea datelor definite in viziuni, crearea criteriilor in viziuni ~i stabilirea
orului penniselor de acces asupra viziunilor, obtinerea informatiilor despre viziuni, precum ~i crearea ~i
mpuri: modificarea viziunilor, utilizand Editorul de lnterogari [2]. Ultimul compartiment al acestui capitol este
unde dedicat expresiilor-tabel, descrisa sintaxa de baza, sunt date exemple de diferite forme de expresii-tabel ~i
aplicabilitatea lor.
wr) ~i
8.1. Tabele temporare
<) ale Tabelele temporare sunt similare celor permanente, cu exceptia ca tabelele temporare sunt pastrate
1elelor in tempdb ~i sunt ~terse imediat cand nu mai sunt folosite.
Exista doua tipuri de tabele temporare: locale ~i globale. Ele difera unul de altul prin numele,
enti. vizibilitatea ~i disponibilitatea lor. Numele tabelelor temporare locale incep cu un simbol ,,#'', sunt vizibile
nt de pentru utilizator numai in sesiunea curenta ~i sunt ~terse cand are loc deconectarea de la instanta bazei de
rarul, date. Numele tabelelor temporare globale incep cu simbolurile ,,##". Dupa crearea lor sunt vizibile de
partin orice utilizator ~i sunt eliminate cand toti utilizatorii ce se refereau la acestea s-au deconectat de la baza de
date.
fel ca De exemplu, daca se creeaza tabelul discipline, acesta poate fi folosit de orice persoana care are
!le au pennisiunea in aceasta baza de date sa-1 utilizeze, pana la ~tergerea lui din baza de date. Daca o sesiune a
bazei de date creeaza un tabel temporar local #discipline, numai sesiunea poate procesa acest tabel ~i este
edent eliminat cand sesiunea este deconectata. Daca, insa, se creeaza un tabel temporar global ##discipline,
fiecare utilizator al bazei de date poate procesa acest tabel. Daca niciun utilizator nu accede la tabel dupa
crearea acestuia, tabelul este eliminat, daca utilizatorul ce 1-a creat s-a deconectat de la baza de date. Daca
alti utilizatori proceseaza tabelul global temporar, acesta va fi ~ters dupa ce ultimul utilizator se va
deconecta de la baza de date.
Tabelele temporare, de obicei, se folosesc pentru pastrarea datelor provizorii ~i procesarea lor
ulterioara in cadrul unor proceduri mai complexe. Mai jos, este prezentat un exemplu simplu de lucru cu
tabelele temporare.
- -1.
- CREATE TAB LE ##discipl i na_e valua r e_grupa Dis ciplina VARCHAR , 255 Tip_ Eva l uare VARCHAR 30 J
[ Data] DATE Grupa CHAR 6 .
- .. 2.
- rnSERT INTO ##disciplina_evaluare_grupa
SELECT DISTINCT d . Disciplina
s Tip_Evaluare
s . Data_Eval uare ,
g . Cod_G rupa
FROM discipline d '• .. ~ studenti r e us i ta s ON d Id_Di scip lina s . Id_D isciplina
1 · ; J gr upe g ON g Id_Grupa s I d_Grupa
A~a cum se poate vedea din imaginea de mai sus, primul pas consta in crearea unui tabel temporar
global. La al doilea pas tabelul creat este populat cu datele privind evaluarea cuno~tintelor. La al treilea
pas are lac interogarea tabelului creat. ~i, in sfiir~it, al patrulea pas ~terge tabelul temporar creat la primul
pas.
8.2. Viziuni
In SQL Server, o viziune (View) este un tabel virtual al carui continut este definit de o interogare. 0
viziune poate fi creata din unul sau mai multe tabele ale bazei de date. Viziunile sunt frecvent utilizate
atunci cand se dore~te evidentierea unor date anumite pastrate in baza de date. Viziunile permit diferitilor
utilizatori sii dispuna de acces la acelea~i date sub o optica diferita ~i acestea pot fi exploatate de diverse
aplicatii.
Simplificarea Viziunile permit crearea unui cod de programare mult mai curat, in sensul ca ele pot
codului: i contine un SELECT complex. in acest fel, pot fi create viziuni pentru programatori .,
I cu scopul de a-i scuti de dificultatea de scriere a mai multor interogari SELECT .
; complexe. I
8.2.3. Restrictii
, de utilizare
inainte de a crea vederi, trebuie sa se tina cont de restrictiile mentionate maijos:
• Instructiunea SELECT a unei viziuni nu poate:
• Genera doua coloane cu acela~i nume;
• Utiliza clauza ORDER BY, cu exceptia cazului in care clauza TOP (n) este inclusa;
• Utiliza cuvantul-cheie INTO;
• Consulta un tabel temporar sau o variabila;
• Utiliza variabile.
• 0 viziune poate fi creata numai in baza de date in uz. Totu~i, tabelele ~i viziunile, ce se refera la
o viziune noua, pot exista in alte haze de date sau chiar pe alte servere.
• Nu pot fi create viziuni temporare ~i nu pot fi create viziuni asupra tabelelor temporare.
• Poate fi folosit doar SELECT* intr-o definitie a viziunii, daca clauza SCHEMABINDING nu
este specificata.
• 0 viziune poate avea nu mai mult de 1024 de coloane ..
• Viziunile pot fi imbricate in pana la 32 de niveluri
• Instructiunea CREATE VIEWtrebuie sa fie singura instructiune dintr-un batch.
Exista doua moduri de gestionare a viziunilor:
Object Explorer
Con nect .. ¥
1::; iJ, LOCALDEV01 (SQL Ser1er 14.0.1000.169- sa)
:.-::' Databases
tt System Databa s:~
1+ Databa se Snapshots
ffi ii AclventureWorks2017
F ii u niversitatea
I~. Database Diagram~
r-r Table~
1,t ~. '
¢.
I
1+ Exten Newv;ew .. .
Eb Syno 1
Pro gr
Filter ~
I±
'.t11rt PnwFr%f'll
''
Dupa actionarea acestei optiuni, se deschide mediul constructorului View Designer ~i fereastra
Add Table . Mediul View Designer este constituit din patru panele: Panelul diagramelor,
Panelul criteriilor, Panelul SQL ~i Panelul rezultatelor.
Add Table
Add Close
Pe fereastra Add Table, pe filele Tables sau Views, se da un click pe tabelul sau viziunea care va
participa la crearea viziunii ~i se aplica un click pe butonul Add. Se repeta acest proces pentru
fiecare tabel sau viziune care trebuie adaugate la noua viziune. Butonul Add are functia de
adaugare a tabelelor care vor face parte din aceasta viziune. Sa se observe ca, la adaugarea
tabelelor pe panelul diagrame, in panelul SQL, se completeaza automat expresia ce urmeazJ
dupa clauza FROM:
Administrarea viziuni/or fi a expresiilor-ta1
MV.univer5itatea · dbo .View_1* -ti X SQlQueiy1 .sq! - LO.. .ol.master (sa {66)) Object Explorer Details
< grupe
Column Alia> Table orarul
orarul_grupa (schema_universitatea2)
profesori
studenti
studenti_reusita
SELECT
FROM dbo.studenti_reusita INNER JOIN
dbo.discipline ON dbo.studenti_reusit
ner ~i fereastra
l diagramelor, Add Close
5. Dupa ce toate tabele necesare sunt adaugate la viziune, se apasa butonul Close din fereastra
..
Add Table. Aceasta fereastra poate fi rechemata ori de cate ori este nevoie din butonul Add
Table Ml de pe hara de instrumente .
6. in panelul diagrame, coloanele, care vor constitui VIZlunea, sunt selectate cu un click In
patratelul corespunzator din stanga. Coloanele selectate apar automat in Column din panelul
criterii ~i in panelul SQL urmeaza dupa clauza SELECT.
S.ELECT dbo .di scipline.Discip lina, dbo. studenti_reusita .Tip_Eval uare, dbo.~tudenti_reusita.Nota,
dbo.grupe.Cod_Grupa, dbo.cliscipline.lcl_Disciplina
FROM dbo.discipline INNER JOIN
dbo.studenti_reusita ON dbo.discipline.ld_DiKiplina =dbo.studenti_reusita.ld_Disciplina INr'JER JOIM
:a care va
dbo.grupe ON dbo.studenti_reusita.ld_Grupa = dbo.grupe.ld_Grupa
es pentru
mctia de
iaugarea 7. Pentru executarea viziunii, este suficienta aplicarea unui click pe butonul Execute SQL
urmeaza de pe hara de instrumente. Rezultatul este afi~at in panelul rezultate:
Administrarea viziunilor #a expresiilor-tabel
<
Column Alias Table Outp ... Sort Type Sort Order Filter
Disciplina di~cipline ~
Tip_Eva luare studenti_r ... ~
Nota studenti - r... ~
Cod_ Grupa grupe ~
1..1 l"'\;.r;_J;_, ,.1;.r ;-1;_, 1-:il
.. - ·- -
SHE.CT clbo.discipline.Disciplina, dbo.studenti_reusita.Tip_Evaluare, dbo.studenti_reu sita.Nota,
~bo.grupe.Cod_Grupa, dbo.discipline.ld_Di;ciplina
FROM dbo.discipline INNER JOIN
dbo .studenti_reusita ON dbo.discipline.ld_Disciplina = dbo.studenti_reu sita .ld_Disciplina INNER JOIN
dbo.grupe ON dbo.studenti_reusita.ld_Grupa = dbo .g rupe.ld_Grupa
-
I ,;;ri- ,;.t;;ri 0n,;;.r:i T ;;.;t1 d J ni::1-1 1"'·
Connect"" f 1<¥
""" -· .._... ·-" -~-- .. -.~~'""' ~·~
··=' ta LOCALDEV01 (5QL S.erver 14.0.1 000.169 - s.a· LOCALDEV01 (S.QL S.er'ler 1l
Databases
Lil Sys.tern Databases Name
f' Databas.e S.napshots System V iew~
fJ ii .Adventure'\•Vorks.2017 § exemplu11
- ii universitatea
Database Diagrams
Tables
r---;-'71
L.;<,~
0
::f System Views
It § dbo.exemplul1
;;;.. FvtPrnnl RF-~nt 1rrF";
Administrarea viziunilor 1i a expresiilor-tabel
Im discipline _d Im studenti_reusita
D • (All Columns) D ld_Profesor ;:J *(All Columns)
LJ ld_Grupa
D ld_Oisciplina 0 1d_Grupa
0 Tip_Evaluare 0 Cod_Grupa
0 Disciplit1a
D Nr_ore_plan_disciplina 0 Nota ;:J 5pecialitate
[~J Data_Evaluare D Nume_Facultate
N <
Column Alia s Table Outp ... Sort Type Sort Order Filter
Disciplina discipline ~
Tip_Evaluare studenti_r ... ~
Nata studenti_r ...
,i"'(g)Q
.. . o . . .,
Cod_ Grupa grupe ~
Data_Evaluare studenti_r ... ~
oata de
5ELECT
ld_Diociplina diocipline
@¢
dbo.di>Cipline.Disciplina, dbo.studenti_reusita.Tip_Evaluare, dbo.grupe.Cod_Grupa, db o.studenti_reus
CD("'\fl;( .•H... ,.. ~ ; ..... ; ..... 1;....,,... lt\1"-ICO lnll\ I
1acest in aceasta fereastra, este suficient sa fie marcate coloanele care nu trebuie sa fie prezente in
ziunea rezultatul viziunii ~i apoi sa se salveze modificarea realizatii, executand un click pe butonul Save. Mai
departe, editorul de design al viziunii poate fi inchis.
•ata se
8.3.4. Modificarea ordinii de prezentare a ciimpurilor
Pentru a solutiona sarcina de reordonare a campurilor, se aplica tehnica de glisare pe panelul
criteriilor in fereastra deschisa anterior. Dupa modificarile efectuate, noua structura a viziunii este salvata.
Column Alias Table Outp ... 5ort Type Sort Ord er Filter c
Disciplina discipline RJ
Tip_Evaluare studenti_r ... RJ
Cod _Grupa grupe l~
Data_Evaluare stuclenti_r... RJ
SELECT TOP (100) PERCENT dbo.discipline.Disciplina, dbo ..studenti_reusita.Tip_Evaluare, db o.grupe.C od_Grupa,
~bo.studenti_reusita.Data_Evaluare
FROM dbo.discipline INNER JOIN
clbo.>tudenti_reusita ON clbo .discipline.ld_Di sciplina = dbo.stuclenti_reusita.ld_Disciplina lr~NER JOIN
clbo.grupe ON clbo.studenti_reu sita.ld_G rupa = dbo.grnpe.ld_Grupa
Disciplina Tip_Evaluare Cod_Grupa Data_Evaluare
• Cercetari operntwnale
C·-:rc.eteri operat~c:nalr:
Te~tul
Te:stut'"
1 CIBF1
rn;n
Ba: e de date Ti=stui I CIB l-1 2D17-1~·- iG
Ba:e de date T1:stui ~ CISF1
t.;tn 1d11n rir d::.itp ·~i ~lnrintn11 T .::-~~; i! I rm1-1
Acum, se formuleaza alt criteriu, cerand ca, in tabelul rezultant, sa apara inregistrarile cu valori in
coloana Tip_evaluare ce incep cu 'Test' ~i valorile in coloana Cod_ Grupa sa fie egale cu 'CIB171'.
Suplimentar, in co Joana Alias erau definite alias-uri pentru coloane Tip_Evaluare, Cod_ Grupa - Testul ~i
Grupa, respectiv. in coloana Sort Order, s-a cerut sortarea rezultatului afi~at dupa campul Tip_Evaluare.
Co lumn Alia s Table Outp ... Sort Type Sort Order Filter
Di;,ciplina discipline ['.{]
Tip_Evaluare
Cod_ Grupa
studenti_re ...
grupe
Rl
RJ
Ascending
0
Data_Eva luare studenti_re ... Rl
SELE CT TOP (100) PERCENT dbo.discipline.Disciplina, dbo.stuclenti_reusita.Tip_Evaluare AS Testul,
dbo.grupe.Cocl_Grupa AS Grupa, db o.studenti_reusita.Data_E.valu are
FROM dbo.discipline INNER JOIN
dbo. studenti_reusita ON dbo.discipline.ld_Dis.ciplina = dbo ..studenti_reu sita.ld_Di.scip lina INNER JOIN
=
dbo.grupe ON dbo.studenti_reusita.ld_Grupa dbo .grupe.ld_Grupa
Disciplina Testul Grupa Data - Evaluare
~ (ercetan cpuationale Te::;tu i j cia·1"71 2017 - 1G-Jt.
Ba:.t: de dat~ Te;t·J i 1 ~181 ~I 2.'.· 1·• · IC- i
Structun de date S! algoritno: T eSitU~ 1 c:!Bi:-'1 201~-1~· 12
L-·laterl1at1ca d1~creta Te:tui :::181~1 :Cl"-1>j3
l,1firif1Mfo 1:!=:rr1nFh1r Tf::ti 11 \"iR1-! :1~1-·1;)<:f
Pentru a grupa dupa coloana sau a aplica o functie de agregare, se da un click cu butonul drept pe
coloana ~i apoi in meniul de context se selecteaza optiunea Add Group By. Dupa aceasta actiune, in
panelul criterii, a aparut o coloana cu numele Group By. in coloana Or, se introduc orice criterii de
specificare a liniilor cautate.
5. Pentru adaugarea accesului explicit unui utilizator sau rol, se apasa butonul Search. Va aparea
c
o fereastra de dialog Select Users or Roles ~i in aceasta fereastra, pentru a deschide urmatoarea
fereastra - Browse for Objects, se apasa butonul Browse. in fereastra Browse for Objects, se
alege un rol sau un utilizator care va avea acces la viziunea data, apoi se confirma obiectul ales
prin apasarea butonului OK.
6. in consecintA, utilizatorii apar in tabelul Users or roles deja cunoscut. Selectand utilizatorul
respectiv in tabelul Users or roles pot fi editate pennisiunile de acces detaliate in tabelul de
mai jos, Permissions for, fila Explicit. Pentru a viziona proprietatile native de acces al fiecarui
utilizator, se alege fila Effective.
7. Dupa, se face un click pe OK.
- -- - ------- Vlew Properties - exemplul 1
Select a page
!J Sclipt T Help
JA General
1' Permissions
JA Security Predicates ~chema: dbo
}i E:.dended Properties
\ll~>L~.£!1!1t.Qerrmssions
Connedioo
Server:
MV P.ennissions for Anna: t;;_olumn Pennissions .. .
OK Cancel
afi~eaza dependentele obiectului cu scopul de a determina daca vreo viziune este afectata de modificarea
propusa.
Pentru obtinerea informatiilor despre viziune, se executa urmatorii p~i:
I. in Object Explorer se extinde un grup de servere ~i apoi se extinde un server.
2. Se extinde Databases, se extinde baza de date in care se gase~te viziunea ~i, apoi, se extinde
dosarul Views.
3. Se aplica click-dreapta pe viziune ~i, apoi, in meniul de context, se alege View Dependencies
in consecint3., se deschide fereastra Object Dependencies, 1n partea de sus a acestei ferestre se
afla doua radiobutoane:
• Objects that depend on <nume obiect>: Afi~eaza o lista a obiectelor care sunt dependente
de obiectul selectat.
• Objects on which < nume obiect > depends: Afi~eaza o lista a obiectelor de care depinde
obiectul selectat.
in functie de butonul bifat pe panelul de mai jos numit Dependencies, se afi~eaza o ierarhie
(un arbore) alcatuita din obiecte care depind de obiectul selectat sau de care acesta depinde.
Dependencies
r=;: ii§if =;w~;;;;.cc···········•""""""""'""""""""""""""""""""""""""""""""""""""""""""""""""'"""""""""'""''"""""'"""""""""'""""""""'""""'"'""""""''l
I . studenti_reusrta
f:m discipline
I ' · f:m grupe
I ' · f:m profesori
I ' .. f:m studenti
I
Connedian
Server:
MV
Connection: I
M\f\malian
OK Cancel
Selectand un obiect sau altul din arborele-obiecte Dependencies, se pot obtine infonnatii
detaliate despre aceste obiecte 1n trei cfunpuri grupate sub numele Selected object.
• Name: Afi~eaza numele complet al obiectului selectat din arborele-dependente. in cazul
nostru, conform imaginii de mai sus, numele este alcatuit din
nume server.nume baza de date.nume schema.nume viziune.
• Type: Afi~eaza tipul obiectului selectat in arbore. in cazul concret, din arbore-obiecte este
selectata o viziune (exemplull).
• Dependency type: Afi~eaza tipul dependentei dintre doua obiecte. Tipul dependentei poate
fi unul din urmatoarele:
Admini.'itrarea viziunilor ~i a expresiilor-tabel
ficarea • Schema-bound dependency: Este o legatura intre doua obiecte care previne ~tergerea
sau modificarea obiectelor referite, atat timp cat exista obiectul ce se refera.
Dependenta Schema-bound este creata atunci cand o viziune sau o functie definita de
utilizator este creata, utilizand clauza WITH SCHEMABINDING sau atunci cand un
tabel refera alt obiect printr-o constrangere CHECK sau DEFAULT, sau in definitia
extinde unei coloane calculate.
• Non-schema-bound dependency: Este o relatie intre doua obiecte care nu impiedica
ncies obiectului referit sa fie ~ters sau modificat.
estre se
8.3.8. Vizualizarea date/or din viziuni
endente Se va afi~a acum datele din viziuni, utilizand mediul SQL Server Management Studio. Astfel,
pentru consultarea unei viziuni, se executa urmatorii p~i:
depinde 1. Se extinde grupul de servere ~i apoi se extinde serverul necesar.
2. Se extinde Databases, se extinde baza de date in care se gase~te viziunea ~i apoi se da un click
erarhie pe Views
I-
nde. 3. Se aplica un click cu butonul drept al mouse-ului pe viziunea in cauza.
4. Pentru a vizualiza datele definite de viziune, in meniul de context, se selecteaza Select top
JOOORows.
Ca rezultat, in campul de lucru al sistemului SQL Server Management Studio se lanseaza o
fila noua a Transact-SQL Query Editor, similara celei prezentate in figura de mai jos. in
partea de sus a filei este prezentata interogarea care cere afi~area primelor 1000 de inregistrari
cu atributele ce alcatuiesc aceasta viziune, iar in partea de jos sunt afi~ate rezultatele acestei
interogari.
rmatii
8.4. Gestiunea viziunilor, utilizand editorul de lnterogari
cazul Asupra unei viziuni, se pot efectua acele~i operatii ca ~i asupra unui tabel, cu deosebirea ca
din viziunile nu contin date ~i ca orice modificari efectuate asupra datelor sunt reflectate ~i in viziuni. Astfel,
asupra unei viziuni, se pot realiza urmatoarele instructiuni Transact-SQL: crearea viziunii (CREATE
1e este VIEW), modificarea viziunii (ALTER VIEW), ~tergerea viziunii (DROP VIEW), interogarea viziunii
(SELECT), adaugarea datelor (INSERT), modificarea datelor din viziune (UPDATE) ~i ~tergerea datelor
po ate din viziune (DELETE).
Administrtlretl viziunilor 1i a expresiilor-ttlbel
VIEW METADATA
Specifica ca instanta SQL Server va returna spre DB-Library, ODBC, OLE DB API-uri informatii
de tip metadata cu privire la viziune, in Joe de tabel sau tabele din baza de date, atunci cand este
solicitat modul de afi~are de tip metadata printr-o interogare transmisa catre viziune.
USE universitatea
GO
DROP VIEW IF EXISTS dbo.exemplul3;
GO
CREATE VIEW exemplul3 (Id_Student, Nume_Student, Prenume_Student,
Data_Nasterii, Anul, Luna, Ziua_lunii) WITH SCHEMABINDING AS
SELECT Id_Student,
Nume_Student,
Prenume_Student,
Data_Nastere_Student,
YEAR(Data_Nastere_Student),
DATENAME(MM,Data_Nastere_Student),
DAY(s.Data_Nastere_Student)
FROM dbo.studenti s WHERE Nume_Student LIKE 'C%';
GO
-- Testarea Viziunii
SELECT * FROM exemplul3
-- Nu se poate ~terge coloana din Tabel
GO
ALTER TABLE studenti DROP COLUMN Data Nastere Student
GO
~ Results ~ii Messages
ld _Student Nurne _Student Prenume _Student Data - Nasterii Anul wna Ziua_lunii
101 Cosovanu Geanina 2000--08{!4 20C{} August 4
.2 H.12 Coste Claudia 1;19g,. 12-05 1595 December 5
3 126 Corovet Eduard 2000-01-22 2COO January 22
t. 16-G Covas Roman 200-0-10-10 2000 October 1{)
Administrarea viziunilor ~i a expresiilor-tabel
schema
M=:g 5074. Level 1€ , Stat.e 1, Line 21
e), daca The abJee:t 'exemplul3 t is dependent -on colurrrn 1
::atc_Nas:L.e:r€:_Studeni:' A
bat, este
mai intai
a WITH Folosirea optiunii SCHEMABINDING necesita ca instructiunea SELECT sa contina numele schemei
eata. Cu obiectelor: tabele, viziuni sau functii. Este important de remarcat ca obiectele mentionate trebuie sa se
modifica gaseasca in acee~i baza de date.
m3 Results ~ Messages
D1sciplina Nr_ore __:plan_disciplina
J
['¢..~·~·~·~"'.??..~i.?.~.~·i·~········....... . . . . . . . . . . . . . . . .· .· .·. ... .... . . ... .. 7'6
2 Structuri de date si algoritmi 7£
3 Umbaje evaluate de programare fJava .. NETt 76
4 Practica de licenta 8{}
5 Prac.1ica de productie 8{}
0 viziune poate fi creata utilizand una sau mai multe tabele sau viziuni, deja, definite. Cel care a
creat viziunea are toate drepturile de acces asupra ei.
USE universitatea
2 GO
DROP VIEl<J H fXI~JS dbo . exemplul5 ;
GO
_, .~CREATE VIEW exemplul5
1-IITH ENCRYPTION AS
SELECT e . Nume_Student ,
e . Pr enume_Student
C· e Anul AS Anul_Nasterii ,
CASE l.JHEN g . Sef_grupa :s '•C ''-' THEN 1 ELSE 0 END AS este_Seful_Grupei
11 FROM exemplul 3 e cEF~ JOI~ dbo . grupe g ON g . Sef_grupa ~ e . Id_student ;
12 GO
sp_h e lptext 'exemplulS'
121 % -
l§l'i Messages
The text fer c.bj ect 1
exerrp:.u:.5' .:...3 enc::ypte :i.
inregistrarile tabelului syscomments contin textul instructiunii CREA TE VIEW, care poate fi criptata
prin specificarea unei optiuni. Optiunea asigura criptarea textului comenzii de creare a viziunii, pentru ca
acesta sa nu mai poata fi vizualizat ~i editat.
inainte de cuvantul-cheie AS, este inclusa optiunea WITH ENCRYPTION. Astfel, textul interogarii
nu poate fi redat, chiar daca este acces deplin la baza de date ~i pot fi urmarite direct tabelele de sistem. Cu
alte cuvinte, definitia unei vederi protejate nu poate fi accesata nici prin intermediul administratorului de
sistem SQL.
- Pentru a evita asemenea situatii, precum eel din exemplul precedent, instructiunea de creare a
viziunii trebuie sa contina optiunea WITH CHECK OPTION. Din imaginea de jos, se vede cum se
comporta, intr-un caz similar, viziunea exemplu/4. Instructiunea UPDATE lansata nu trece validarea ~i
operatiunea este oprita.
USE universitatea
- GO
UPDATE e xemplul4 SE T r~r_ore_ plan_ disciplina 60 WHERE Disciplina 'Sis leme de calcul' ,
121 % •
~'i Messages
':he a:.~e.rr.pted .:..n9er: . o:r :;Jpdate fa..:.::.e:i becau.se the -:a.:::ge:; v:.=•;,., ei -:;her 9pe: c:f1e3
w: :H CHECK CP'I!ON er spans a 'T:.ew t.:fu:rt. epec1Zie:3 WITH .:m~::K OPTIC?.; 3.:1d :n-e ::r rr...cI~ rclrT3
r esul~:.ng frcm t..he wpe:rat:..o:l d.:..d net qua:.:.: y under r.;he -::HECK OPTION c12nst:raint..
Th e 9 t..at. e rr:.en t h a s b2en cerr-.u.nated .
iptata in momentul ill care in tabelele de baza sunt adaugate noi date sau sunt actualizate sau ~terse cele
tru ca existente, aceste modificari se reflecta corespunzator in viziunile bazate pe aceste tabele. Acest lucru este
adevarat ~i dimpotriva, cu singura mentiune ca exista anumite restrictii la inserarea, modificarea sau
~tergerea datelor dintr-o viziune.
ogarii
n.Cu Aceste restrictii sunt redate pe scurt in continuare [15] :
lui de • Orice modificare, inclusiv prin UPDATE, INSERT ~i DELETE, trebuie sa se refere la coloanele
unuia ~i acelui~i tabel de baza.
• Coloanele modificate in viziune trebuie sa se refere direct la datele din coloanele tabelelor.
Coloanele nu pot fi derivate ill niciun alt mod, cum ar fi prin:
iferite 0 functie de agregare: AVG, COUNT, SUM, MIN, MAX, GROUPING, STDEV, STDEVP,
•
~ECT, VAR sau VARP.
riatica • Un calcul. Coloana care nu poate fi calculata prin expresii care implica alte coloane.
Coloanele formate ill baza operatorilor UNION, UNION ALL, CROSS JOIN, EXCEPT sau
INTERSECT sunt echivalente ~i, de asemenea, se considerate a fi calculate, ~i nu pot fi
actualizate.
• Coloanele modificate nu sunt afectate de utilizarea clauzelor GROUP BY, HAVING sau
)anele DISTINCT.
i, spre • Clauza TOP nu este folosita nicaieri cu instructiunea SELECT in viziune impreuna cu clauza
WITH CHECK OPTION.
~LETE
~ns, se 8.4.4. Modificarea fi suprimarea viziunilor
lnstructiunea ALTER VIEW permite recompilarea unei viziuni create anterior, precum ~i definirea,
,t eia in modificarea sau ~tergerea constrangerilor asociate acelei viziuni. Atunci cand se executa o instructiune
:fera la ALTER VIEW, sistemul Transact-SQL recompileaza viziunea, indiferent daca este sau nu valida. Totodata,
sistemul invalideaza orice obiect local at~at viziunii.
Prin recompilare se intelege refacerea tuturor legaturilor viziunii cu tabelele de baza, verificarea
validitatii tuturor constrangerilor ~i datelor apelate ~i rescrierea viziunii ill sistem in caz de succes.
Recompilarea unei viziuni este utila ~i pentru evitarea unor erori care pot aparea la rularea unei cereri SQL
care folose~te drept tabel viziunea.
1ai este Pentru modificarea sau recompilarea unei viziuni, se folose~te instructiunea, avand urmatoarea
ne. Pot sintax~:
Notatiile din defmitie contin acele~i atribute ca ~i in cazul instructiunii CREATE VIEW.
Fie, se recompileaza viziunea exemplu/2, modificand instructiunea SELECT. Viziunea este
schimbata astfel, incat coloanei Nr_ore_plan_disciplina ii este asociat un alias Numar_ore ~i este
modificat filtrul in clauza WHERE:
8. 5. Expresie-tabel
Expresia-tabel (CTE, Common Table Expression) este utilizata pentru a specifica unset temporar de
rezultate. Aceasta clauza este formata dintr-o interogare simpla ~i defmita in domeniul de aplicare a unei
singure instructiuni SELECT, INSERT, UPDATE sau DELETE. Expresia-tabel, de asemenea, poate fi
utilizata intr-o instructiune CREATE VIEW, ca parte a instructiunii SELECT pe care o define~te. 0
expresie-tabel pot include in repertoriul sau referinte care se raporteaza la sine ins~i. in acest caz,
instructiunea este desemnata ca o expresie-tabel recursiva.
<expresie_tabel>::=
<nume_expresie> [ (<nume_coloana> [ , ... n] ) ]
AS
(<definitie_interogare_CTE>)
<nume_expresie>
Identificator valid pentru o expresie-tabel. Numele argumentului <nume_expresie> trebuie sa fie
diferit de numele altor expresii-tabel defmite in acee~i clauza WITH <expresie_tabel>, dar
<nume_expresie> poate fi identica cu numele unui tabel de baza sau cu numele unei viziuni.
Orice referinta la argurnentul <nume_expresie> in interogarea folosita de expresia-tabel nu este
un obiect de baza.
Administrarea viziunilor fi a expresiilor-tabel
<nume coloana>
a este Specifica un nume de coloana in expresia-tabel. intr-o singura definitie, nume-duplicat nu sunt
i este permise. Numarul de nume de coloane specificate trebuie sa corespunda cu numarul de coloane
din setul de rezultate <definifie_interogare_ CTE>. Lista de nume de coloane nu este optionala,
numai daca numele sunt distincte pentru toate coloanele rezultate furnizate in definitia de
interogare.
<defini~ie_interogare_CTE >
Specifica o instructiune SELECT, care umple setul de rezultate a expresiei-tabel. Instructiunea
uctiunii SELECT a <definifie_interogare_ CTE> trebuie sa indeplineasca acele~i conditii ca ~i cele
necesare pentru a crea o viziune, cu exceptia ca o expresie-tabel nu poate defini o alta expresie-
tabel.
in cazul in care sunt specificati mai multi parametri <definifie_interogare_ CTE>, definitiile de
care se interogare trebuie sa fie conectate cu unul dintre operatorii UNION ALL, UNION, EXCEPT sau
exemplu INTERSECT.
: stocate.
_ - L•JITH cte 1 coll1 , col22 . AS , SELEC T 1 AS co l l . 2 AS col2
_ SELECT ~ FROM cte
121 %
sa fie Fiecare expresie-tabel, de obicei, incepe cu WITH Dar daca exista eel putin o instructiune inainte
>, dar de WITH, ea trebuie sa se termine cu punct ~i virgula. Ce se poate intampla, daca o expresie-tabel mcepe
iziuni. cupunct ~i virgula urmata de WITH (;WITH)? Nuse va intampla nicio eroare: in acest fel, daca se adauga
u este IDl cod lnainte de expresia-tabel, ea nu va strica procesul sau scriptul SQL.
Aici, este un exemplu de expresie-tabel, in cazul in care instructiunea anterioara nu a fost incheiata
cu punct ~i virgula. ~i aici apare o eroare:
Administrarea viziunilor ~i a expresiilor-tabel
l .- SELECT 1
SEL ECT 2
- ~·HTH cte AS ( SELEC T 1 AS coll .• 2 AS col2
SEL ECT 1' FROM cte
121 %
~il Messages
M3g 319, :eve: !S, State ! 1 ::..~e S
Inccrrecc sy:r1cax nea:::: the keyword •w:..th •.
If -:.hi3 etatercen1: :...s a co:rIJ.IEo~ tab:..e e;.:p::ess~cs n ,
an xrr.lnarr.espaces c:ause or a cba.:u;;e track:..ng coni::ext: clauee,
~he r:n::vious .sr.ar.eme:nt nu;.st be term:..nated wii:h a s;emicol::m.
SELECT 1
SELECT 2
;WITH cte AS (SELECT 1 AS coll, 2 AS col2)
SELECT * FROM cte
realizeazli rezultatul scontat.
Se considerli urmlitoarea expresie-tabel:
Expresie SELECT din CTE calculeazli reu~ita medie a fieclirui student (AVG(Nota)) din tabelul
studenti reusita.
A doua instructiune SELECT face o jonctiune intemli, returnand inregistrarile din tabelele asociate,
care satisfac criteriile de asociere prin compararea valorilor coloanelor respective din cele douli tabele ~i
filtrele definite. in consecintli este formatli o lista Id_Students (identificatoarele studentilor), ale cliror note
. la examene sunt mai bune decat reu~ita lor medie.
La proiectarea tabelelor, deseori, apare o sarcina, in special, cand nu exista cheia primara, dar deja
datele sunt incarcate, fapt care impiedica crearea cheii. in acelalli timp, domeniul problemei necesita
unicitatea datelor.
Fie, in urmatorul tabel, sunt cuprinse urmatoarele campuri:
ml Results ~ Messages
T_ID T_DBMS Num
1 !2 ! Orade 1
2 4 Ora de 2
3 7 Ora de 3
4 3 PostgreSQL 1
5 PostgreSQL 2
6 B PostgreSQL 3
7 1 SQL Server 1
8 6 SOL Server 2
in exemplul de mai sus, numerotarea liniilor s-a realizat dupa coloana T_ID. Daca s-ar dori afi~area
setului de date in alta ordine, adica adaugarea clauzei ORDER BY, m acest caz, numai afi~area o sa se
realizeze dupa noua ordine, numerotarea randurilor se va realiza dupa clauza ORDER BY a functiei
ROW NUMBER.
Deci, se poate proceda astfel, aplicand o expresie-tabel, care poate fi conceputa ~i ca o reprezentare
virtualA, eliminand duplicate din tabelul virtual. De~i CTE nu sunt obiecte stocate in baza de date, acestea
pot utiliza operatori de actualizare. Ca urmare, totul se reduce la o singura interogare:
Administrarea viziunilor ~;a expresiilor-tabel
_ ::,DECLARE @tbl_List TABLE ( T_IO INT IDENTITY, T_DBMS VARCHAR '. 10 1 '
rnsERT INTO @tbl_List
VALUES (' SQL Server' ), ( 'Oracle' ), ( 'PostgreSQl' 'Oracle ' , ' 'PostgreSQL ' ,'<,
'SQL Server' ) , ( '0Pac le' ) 1 ( 'PostgreSQL '
5 '.- l•JITH CTE
iS AS
T_ID T_DBM S
: SOL Server
2 2 Oracle
J 3 PostgreSOL
SQL ' '•, WITH t(N) AS (SELECT 41 UNION ALL SELECT 43) SELECT AVG(N) FROM t
va calcula rezultatul 42.
Pot fi declarate ~i utilizate mai multe expresii-CTE. in cazul de fata:
WITH Li tere AS
(
SELECT ASCII('A') AS Cod, CHAR(ASCII('A')) AS Lit
UNION ALL
ccesibile SELECT Cod+l, CHAR(Cod+l) FROM Litere
e, arbori, WHERE Cod+l <= ASCII('Z')
\>/ITH f r N, Fact AS
ml Results ~'I M•
SELECT 5 , 1
N Fact
UNION '-'LL 5
..............
1
SELECT N 1 . N ' Fac t FROM f ~vHERE 2 4 i:;
.;
cora ~i
pentru 3 3 211
tie de - SELECT FROM f , ..,.~ 2 €{}
ingura 5 12[}
rogare
'T!ON
Administrarea viziunilor ~i a expresiilor-tabel
Se analizeaza comparativ exemplul de mai sus cu CTE. Ordinea de executare a expresiei recursive
este urmatoarea:
1. in CTE este membru de intrare ~i se executa prima interogare:
SELECT 5, 1
Aceasta interogare este numita membru-ancora. Expresia-tabel se executa repetat atata timp
pana cand rezultatul complet este returnat. Raspunsul este stocat in rezultatul final al
interogarii ~i 1n stiva.
2. Cat timp stiva nu este goala, se repeta pa~ii urmatori:
2.1. Se executa interogarea a doua, care reprezinta membrul recursiv:
SELECT N - 1, N * fact FROM f WHERE N > 1
utilizand stiva curenta. Raspunsurile sunt introduse 1n rezultatul final al interogarii ~i in
tabelul intermediar.
2.2. Continutul stivei se mlocuie~te cu continutul intermediar, iar ultimul se curata
Cand se ajunge la nivelul maxim de iterare, valorile din stiva se var asigna rezultatului, se va
combina cu membrul ancora, ~i rezultatul va fi afi~at. Atunci cand se utilizeaza UNION (nu UNION ALL),
la etapele 1 ~i 2.1 duplicate sunt eliminate.
INSERT @TT
SELECT 1, 'Strabunel', 'Gheorghe Vasilache', NULL UNION ALL
SELECT 2, 'Bunica', 'Elena Paduraru', 1 UNION ALL
SELECT 3, 'Tata', 'Ion Paduraru', 2 UNION ALL
SELECT 4, 'Unchi', 'Mihai Paduraru', 2 UNION ALL
SELECT 5, 'Matusa', 'Natalia Manole', 2 UNION ALL
SELECT 6, 'Frate bunel. ', 'Mihai Vasilache', 1 UNION ALL
SELECT 7, 'Frate', 'David Paduraru', 3 UNION ALL
SELECT 8, 'Sora', 'Sarina Caruntu', 3 UNION ALL
SELECT 9, 'Frate', 'Radu Paduraru', 3 UNION ALL
SELECT 10, 'Eu', 'Sandu Paduraru', 3
Este creat ~i populat un tabel in care nodul curent refera o valoare din cheia tabelului. Aceast!
structura ajuta la reprezentarea unui arbore definit unic printr-o cheie, parinte ~i informatie (valoare). Se
propune sa se afle toate nodurile prin care se trece de la radacina pana la :frunza cu o anumita inform*.
Un exemplu mai concret ar fi acela, prin care se dore~te sa se afle toti copiii unui parinte, plecand de la
parintele imediat pana la strabunele sau putand afla structura ierarhica a familiei unor frati pomind de la
acesta ~i pana la ultimul membru al familiei.
Administrarea viziunilor fi a expresiilor-tabel
e Pentru exemplul propus, urmeaza interogarea de construire a parintelui ~i nivelului generatiei pentru
fiecare membru al familiei. Utilizarea expresiei-tabel recursive pome~te de la frunza cu informatia data.
WITH FamilieArb
AS
mp (
al SELECT *, CAST(NULL AS VARCHAR(25)) AS ParinteNume, 0 AS Generatie
FROM @TT
WHERE ParinteID IS NULL
UNION ALL
SELECT Fam.*,FamilieArb.Nume AS ParinteNume, Generatie + 1
FROM @TT AS Fam
in INNER JOIN FamilieArb
ON Fam.ParinteID = FamilieArb.ID
va
SELECT * FROM FamilieArb
LL), Se creeaza membrul-ancora, in care se formeaza o pseudocoloana (Genera/ie), ce ajuta sa fie
identificat nivelul ierarhic. Rezultatul membrului-ancora se folose~te ca intrare pentru membrul recursiv,
se incrementeaza nivelul ~i se afi~eaza rezultatul:
intrebiri de control:
1. Tipuri de tabele temporare. Utilitatea tabelelor temporare.
2. Viziunile ~i rolul acestora in baza de date.
3. Metode ~i particularitati de creare a viziunilor in SQL Server .
4. Situatiile in care crearea viziunii este posibila sau imposibila.
5. Sintaxa de baza a instructiunii CREATE VIEW. Optiunile WITH CHECK OPTION ~i
SCHEMABINDING.
6. Care sunt caracteristicile expresiei-tabel? Dar ale interogarilor recursive folosind reprezentari
virtuale?
Sarcini practice:
1. Sa se creeze doua viziuni in baza interogarilor formulate in doua exercitii indicate din capitolul
4. Prima viziune sa fie construita in Editorul de interogari, iar a doua, utilizand View
Designer.
2. Sa se scrie cate un exemplu de instructiuni INSERT, UPDATE, DELETE asupra viziunilor
create. Sa se adauge comentariile respective referitoare la rezultatele executarii acestor
instructiuni.
Adminisfr(lrea viziunilor 1i a expresiilor-tabel
3. Sa se scrie instructiunile SQL care ar modifica viziunile create (in exercitiul 1) in ~a fel, incat
sa nu fie posibila modificarea sau ~tergerea tabelelor pe care acestea sunt definite ~i viziunile
sa nu accepte operatiuni DML, daca conditiile clauzei WHERE nu sunt satis:facute.
4. Sa se scrie instructiunile de testare a proprietatilor noi definite.
5. Sa se rescrie 2 interogari formulate in exercitiile din capitolul 4, in ~a fel. incat interogarile
imbricate sa fie redate sub forma expresiilor CTE.
6. Se considera un graf orientat, precum eel din figura de mai jos ~i fie se dore~te parcursa calea
de la nodul id = 3 la nodul unde id = 0. Sa se faca reprezentarea grafului orientat in forma de
expresie-tabel recursiv.
Sa se observe instructiunea de dupa UNION ALL a membrului recursiv, precum ~i partea de
pana la UNION ALL reprezentata de membrul-ancora.
Proceduri stocate .~ifuncfii definite de utilizator
, meat
ziunile
0 procedura stocata poate fi executata manual sau poate fi invocata de alte programe. Folosirea
procedurilor extinde gama de facilitati ale mediului client-server, m principal, in problemele de executare
~i mentinere a sistemului, datorita mai multor factori:
• 0 singura procedura stocata poate fi folosita de diverse programe.
• 0 singura modificare actualizeaza automat toate sistemele care utilizeaza acee~i procedura.
• Indata ce procedura stocata este executata pe server, accesarile ulterioare se petrec mai rapid,
deoarece planul ei de executare este pastrat m memorie.
Multi utilizatori confunda o procedura stocata cu o functie, considerandu-le acel~i lucru.
Procedurile stocate returneaza valori prin parametrii de ie~ire, ~i nu o valoare m locul numelui lor, fapt ce
face ca procedurile stocate sa fie mai putin utilizate in expresii.
Procedurile temporare globale au prefixe formate din 2 caractere (##). Aceste proceduri sunt
vizibile pentru toti utilizatorii, dupli ce au fost create ~i sunt ~terse la sf'ar~itul ultimei sesiuni
utilizand procedura.
• Proceduri stocate ale sistemului, care sunt create, in prealabil, ~i fac parte din sistemul SQL
Server, ~i care indeplinesc sarcini administrative. Acestea pot fi executate de orice bazli de date
~i sunt plistrate fizic in Resource database ~i au prefixul sp_. Procedurile stocate ale sistemului
apar logic In sys schema fieclirui sistem de bazli de date definita de utilizator. in SQL Server,
permisele GRANT, DENY ~i REVOKE pot ft aplicate In procedurile stocate ale sistemului.
Cu exceptia unor cazuri speciale, toate procedurile stocate de sistem returneazli valoarea 0.
Aceasta valoare indicli faptul ca procedura a fost executatli cu succes. Pentru a indica e~ecul,
este returnata o valoare diferita de 0.
• Procedurile stocate extinse permit crearea propriilor rutine exteme in limbaje de programare
cum ar ft C sau C++. Procedurile stocate extinse sunt DLL-uri, pe care o instanta poate,
dinamic, sa le incarce ~i sli le execute. Procedurile stocate extinse se executli direct in memoria
virtualli alocatli pentru aplicatii ~i sunt programate folosind SQL Server Extended Stored
Procedure APL Aceste proceduri, apar pentru utilizator ca ~i procedurile stocate tipice ~i se
executli in mod similar.
Procedurile stocate extinse vor ft eliminate 1ntr-una din versiunile urmatoare ale sistemului SQL
server. Pe viitor, Microsoft recomandli sli se utilizeze procedurile CLR. Aceasta metoda ofera o
alternativa mai robustli ~i mai sigura de scriere procedurilor stocate [53] .
ri sunt nume, parametri ~i corp care contine instructiuni ale limbajului Transact-SQL. Instructiunea CREATE
sesiuni PROCEDURE nu poate fi combinata cu alte instructiuni ale limbajului Transact-SQL lntr-un singur grup.
0 procedura stocata comunica cu programele apelante prin parametri. in cazul in care un program
l SQL executa o procedura stocata, valorile pentru procedura sunt trecute in calitate de parametri. De exemplu,
de date poate fi transmisa o anumita stare cu scopul de a fi folosita in instructiunea SELECT, servind, astfel, in
emului calitate de filtru.
Server,
Un parametru trebuie sa posede un nume unic, care, intotdeauna, incepe cu@ ~i contine definitia
proprie a tipului de date. in continuare, este prezentat un cod al unei proceduri stocate [12]:
area 0.
e~ecul, CREATE PROCEDURE test
@Student VARCHAR(4)
-amare Exista, de asemenea, un mod de determinare, daca parametrul este de intrare a datelor sau de ie~ire
poate, a datelor. Pentru a-i distinge, la siar~itul parametrului de ie~ire, se adauga clauza OUTPUT, ca in exemplul
emona urmator:
Stored
e ~i se CREATE PROCEDURE test
@Student VARCHAR(4)
ui SQL @Bursa FLOAT OUTPUT
ofera o
9.2. Crearea procedurilor stocate
Pentru crearea procedurilor stocate in SQL Server 2017, sunt utilizate 2 metode. 0 metoda
presupune crearea procedurii stocate direct In Transact-SQL Query Editor. 0 alta metoda necesita
chemarea ~ablonului de procedura stocata din arborele de obiecte.
uctiuni'
pot fi 9.2.1. Crearea procedurilor stocate in Transact-SQL Query Editor
Se vor examina cateva exemple de creare a procedurilor stocate direct 1n Transact-SQL Query
Editor. Mai intfil, este adusa o procedura simpla ce contine o instructiune SELECT cu criteriu de selectie:
USE universitatea
GO
DROP PROCEDURE IF EXISTS testl;
GO
CREATE PROCEDURE testl
AS
SELECT Nume_Student, Prenume_Student, Data_Nastere_Student
poate FROM studenti WHERE Data_Nastere_Student < '2000-01-01';
'"erirea
Instructiune, deja cunoscuta din capitolul precedent, testeaza existenta procedurii stocate
specificate. Daca procedura stocata exista, aceasta este suprimata. Aceasta procedura stocata afi~eaza lista
studentilor, cares-au nascut pana in anul 2000. Nuse utilizeaza niciun parametru.
mmai
in continuare, este examinata o procedura cu parametri:
edura USE uni versi tatea
:>elele GO
DROP PROCEDURE IF EXISTS test2;
GO
noria CREATE PROCEDURE test2
@Anul SMALLINT = 2000,
ocate @Adresa VARCHAR(255)='mun. Chisinau%'
AS
SELECT Nume_Student, Prenume_Student, Data_Nastere_Student,
Adresa - Postala - Student FROM studenti
WHERE YEAR(Data_Nastere_Student) = @Anul
lta de AND Adresa Postala_Student LIKE @Adresa;
a din
Proceduri stocate §i funcfii definite de utilizator
Aici apar doi parametri Anul ~i Adresa cu valori implicite '2000' ~i respectiv orice valoare, care
incepe cu simbolurile ,,mun. Chisinau".
A treia procedura stocata poseda parametri de ie~ire. Procedura data afi~eaza reu~ita medie pentru
unul din cele 3 criterii acceptate de procedura stocata ('Studenti', 'Grupe', 'Discipline') . in functie de
valoare atribuita parametrului @Criteriu_ca/cul, se executa instructiunea SELECT din tabelele respective.
in aceasta procedura, este creat un parametru de ie~ire @MedieJacultate, care, din start, are valoare
NULL ~i apoi se populeaza de instructiunea SET.
USE universitatea
GO
DROP PROCEDURE IF EXISTS test3;
GO
CREATE PROCEDURE test3
@Criteriu_calcul VARCHAR(10) = 'Studenti',
@Medie_facultate DECIMAL(4,2) = NULL OUTPUT
AS
IF @Criteriu_calcul ='Studenti'
BEGIN
SELECT Nume_Student, Prenume_Student, AVG(CAST(s.Nota AS NUMERIC)) AS
Medie
FROM studenti_reusita s JOIN studenti t ON s.Id_Student=t.Id_Student
WHERE s.Nota IS NOT NULL GROUP BY t.Nume_Student, t.Prenume Student
END
ELSE IF @Criteriu_calcul ='Grupe'
BEGIN
SELECT g.Cod_Grupa, AVG(CAST(s.Nota AS NUMERIC)) AS Medie
FROM studenti_reusita s JOIN grupe g ON s.Id_Grupa=g.Id_Grupa
WHERE s.Nota IS NOT NULL GROUP BY g.Cod_Grupa
END
ELSE IF @Criteriu_calcul ='Discipline'
BEGIN
SELECT d.Disciplina, AVG(CAST(s.Nota AS NUMERIC)) AS Medie
FROM studenti_reusita s JOIN discipline d ON
s.Id_Disciplina=d.Id_Disciplina
WHERE s.Nota IS NOT NULL GROUP BY d.Disciplina
END
SET @Medie_facultate = (SELECT AVG(CAST(Nota AS NUMERIC))
FROM studenti reusita WHERE Nata IS NOT NULL)
GO
Expresia de convertire a campului Nota In tip de date NUMERIC - 'CAST(Nota AS NUMERIC)' a
fost utilizata pentru a obtine o precizie mare a calculului cifrei medii. Cu toate ca functia A VG ignorA
inregistrarile cu valori necunoscute (NULL) , pentru a evita avertizarile din corpul procedurii stocate despre
valorile necunoscute, asupra tabelului studenti_reusita, se aplica o constrangere 'WHERE s.Nota IS NOT
NULL'.
Precum reiese din acest exemplu, standardul Transact-SQL extinde flexibilitatea interogarilor SQL,
apeland la utilizarea unor elemente din programarea procedurala.
care 2. Se extinde Databases ~i apoi se extinde haza de date m care se creeaza procedura.
3. Se extinde Programma.bility ~i apoi se executa un click cu hutonul drept al mouse-ului pe
entru dosarul Stored Procedures.
e de 4. in meniul de context, care s-a deschis, se face un click asupra optiunii New ~i din elemente
tive. disponihile, se alege Stored Procedure... .
oare
Dupa aplicarea unui click pe optiunea Stored Procedure ... , in ciimpul de lucru, apare un
~ahlon de instructiune de creare a unei proceduri stocate noi.
121 %
Nume - Student Prenume _Student Data - Naslere - Student .!\.dresa- Poslala _Student
a ...........................
! Gadalean Gabriela 2001-{}5-05 mun. Chisinau. sir. Calea Orheiului . 11 2
ra 2 Gheorghescu Gabriel 2001-01-01 mun . Chisinau. bd . Moscova. 20
re
Nume _Student Prenume Student Data- Naslere - Student A.dresa - Poslala - Student
T ............ ............... -
! Gadalean Gabriela 2(){)1-05-05 mun . Chisinau. str. Cale a Orlieiului . 112
GhF!nmhP.s:r.11 G"nriP.I 7001,'l1,fl1 m11n lhisinM1 1 hrl Mns:r:rwM ?ll
,,
in fereastra se solicita executarea procedurii stocate test2. in primul exemplu, m calitate de
parametri, au fost utilizate valorile implicite din procedura stocata. Exemplele 2 ~i 3 sunt echivalente. in
ele, pentru primul parametru, sunt definite valori diferite de cea implicita. Exemplele 4, 5 ~i 6, de
asemenea, reprezinta un grup de proceduri echivalente. Trehuie sa se tina cont ca daca, la chemarea
procedurii stocate, nu se specifica denumirile parametrilor (ca mexemplul 6), este important sa se respecte
consecutivitatea valorilor mconcordanµ cu consecutivitatea parametrilor.
Proce<luri stocate #June/ii definite de utilizator
inainte de a trece la executarea unei proceduri stocate cu parametri de ie~ire, este important sa se
mentioneze ca parametrii de ie~ire permit procedurii stocate sa returneze datele catre aplicatia-client care a
initiat executarea acestei proceduri. Aici, indicarea cuvantului-cheie OUTPUT este obligatorie la crearea
procedurii ~i la apelul acesteia. Parametrii de ie~ire in cadrul unei proceduri stocare sunt considerate drept
variabile locale. Pentru a obtine o valoare (rezultat) in procedura care apeleaza, variabilele de ie~ire mai
intai trebuie definite. Cand executarea procedurii stocate ia sf'ar~it, valoarea curenta a parametrului de
ie~ire este transmisa variabilei locale din programul care a initiat executarea procedurii stocate.
SQLQuery3.sql - MV ... a (MV\marian (67))* ·.P X update DB.sq! - MV... a (t.4\1\marian (69)}
USE universitatea ;
i GO
- ·:.. SH NOCOUNT OM
DECLARE @Medie_facultate DECIMAL (4 , 2)
• EXECUTE test3 'Grupe' , @Medie_fac ult ate OUTPUT
IF @Medie_fac ultate >6
BEGIN
!S - PRINT 'Reusi ta medie pe facul tate este
'f +CAST( @Medie_facultate AS varchaP (10 ".i )..,. '.'
10 END ;
11 GO
12
121 %
~ii Results
Ced_ Gr UJ:·a Hedie
CIB171 6.794063
I NF1 7 1 6.976153
TI171 6.B66B34
Reusi ta rnedie pe facu2. r..ate e3te ... . 5 . 8 e .
in exemplul dat, 'in calitate de parametru de ie~ire este definit @MedieJacultate. La chemarea
proceduri i pentru parametrul de intrare @Criteriu_ca/cul era definita valoarea egala cu , Grupe '. Mai
departe, este specificat ca, daca valoarea luata de parametrul@MedieJacultate va depa~i 6, se va afi~a un
mesaj cu valoarea curenta a acestui atribut. Pentru a putea fi inclusa in mesajul textual, valoarea variabilei
@MedieJacultate este convertita de catre functia CAST la tipul de date VARCHAR.
Functia NOCOUNT este activatii pentru excluderea din fereastra Results a mesajelor de executare a
subinstructiunilor parcurse dintr-un set de instructiuni [45]. NOCOUNT dezactiveaza afi~area mesajelor
despre numiirul de randuri procesate. in cazul de mai sus era suprimat mesajul (3 rows affected). Este
binevenita utilizarea acestei functii in mediul de productie, ~i nu in mediul de dezvoltare/depanare.
Precum se poate observa din exemplele anterioare, procedurile stocate sunt chemate spre executare
prin intermediul comenzii EXEC dintr-un pachet de instrucfiuni Transact-SQL sau dintr-o aplicatie-client.
in acel~i timp o procedura stocata poate fi chemata ~i dintr-o instructiune, dupa clauza FROM, utilizand
functia OpenQueryO .
De regula, functia OpenQueryO este utilizata pentru executarea instructiunilor SQL pe un server
indepartat. Daca in functia OpenQueryO este specificat numele procedurii stocate, atunci rezultatele
. executarii acestei proceduri sunt transmise catre serverul local.
Deoarece setul de date obtinut in calitate de rezultat al procedurii stocate este utilizat de clauza
FROM din instructiune SELECT, predicatul ce urmeaza dupa clauza WHERE poate reduce volumul de
date de ie~ire oferit de procedura stocatii.
in exemplul ce urmeaza se executii o procedura stocata pe un server specificat de parametrii
functiei. Asupra rezultatului returnat de procedura stocatii este aplicat un filtru suplimentar din claui.a
WHERE. Functia OpenQueryO are doi parametri: numele serverului conectat ~i instructiunea care va fi
executatii pe serverul dat.
Proceduri stocate §i funcfii definite de utilizator
ant sa se ,. - SELECT FROM OpenQuery r•W ' EXEC u niv e rsita t ea.dbo . te s t 2 ' l
nt care a 2 ~vHERE Nume Student :..L~ E ' 8%' ,
a crearea
ate drept
121 %
~ire mai
trului de Im Results ~'j Messages
Nume _Student Prenume _Student Data_Nastere _Student .A.dresa_Postala_ Student
Brasovianu Teodora 2000-11 -24 mun. 01isinau. sir. Tighina. 23/ 3
Cu toate ca aceasta tehnica permite utilizarea procedurilor stocate ID instructiunile SELECT, nu este
atat de optimizata ca tehnica de transmitere a constrangerilor pentru prelucrare de catre procedura stocata.
Exista doar un singur avantaj evident - posibilitatea de chemare a procedurilor stocate de orice
complexitate din orice instructiune SELECT.
Pentru executarea cu succes a functiei OpenQueryO, este important ca pe serverul la care se
conecteaza sistemul pentru executarea functiei sa fie configurate corect parametrii DATA ACCESS.
Datele returnate de o procedura stocata pot fi pastrate pentru procesarea ulterioara ~a cum este
demonstrat ill exemplul de mai jos. La illceput, este creat un tabel temporar care, ulterior, este populat cu
datele returnate de procedura stocata. Apoi datele din tabelul dat pot fi utilizate ori de cate ori este nevoie
in cadrul sesiunii curente.
USE universitatea
GO
CREATE TABLE #sp_output (Nume VARCHAR(60), Prenume VARCHAR(60), Data Nastere
DATE);
INSERT INTO #sp_output EXEC testl;
Connedion
Server:
MV
~ Connection :
MV'manan
vf View conned1on oroperttes
Pf09l'SS
Ready
OK Cancel
Daca se bifeaza in coloana Pass Null Value, sistemului i se comunica faptul ca pentru parametrii
respectivi sunt setate valori nule. in campul Value se seteaza valorile pentru parametri de intrare diferite
de cele implicite. Dupa completarile necesare, se apasa butonul OK. Rezultatul executarii se afi~eaza in
mediul Transact-SQL Query Editor, precum se poate observa In exemplul de mai jos:
S.QLQ uery3 .sql · MV... a (MV\ marian (51))* -P X Object Explorer Details labB quenes.s:ql -... ter (
USE [u niver si tatea]
GO
:. - DECLARE @r eturn_ val ue int
L\ - EXEC @return_value = [dbo] . [te st2]
@Anu l '- 1999
@Adresa = N'%Balti%'
SELECT 'Return Value' = @retur n_value
GO
121 %
Return Value
Proceduri stocate li funcfii definite de utilizator
SQLQuery6.<ql - MV ... a (MV\ marian (59))' ;;i X SQLQuery:l.sql • MV...a (MV\marian (61))• ObJ&t Explorer Details [ab8 queries.sq! -...ter (MV\
USE [u nive r sit a te a]
GO
; n~ P ~ Obje ct: St o r e dP r ocedu re [ d bo].[tes t2 ~ Sc ript Date:: _/17/ 20 18 1: 02. : 15 f'M ""''%H·/
SET ANSI_NULLS Gr4
GO
SET QUOTED_IDENTIFIER ON
GO
-Al TER PROCEDURE [ dbo ] [ test2 ]
@Anul SMALLHH ,
,(< @Adresa VARCHAR ' 255 '
AS
1L - SELECT Nume_Student . Prenume_Stude nt
Data_Na s te r e_ Student Adre s a_Po sta1 a _Student
FROM studenti
WHERE YEAR Data Nastere_Student = @Anu l
1\, r.1 Adres a_ Po st ala_ Stu de nt • ~ K• @Ad re s a ,
121 °/o •
!l)'I Messages
trametrii
diferite
~eaza in Sa se observe cum arata instructiunea dupa excluderea valorilor implicite. Acum se lanseaza spre
executare procedura respectiva:
5QLQueiy3.sql - MV ... a (MV\ maria.n (61))* ~ X Object Explorer Details JabB queries.sq! -...ter (M~marian (52)}
USE universitatea
,~ GO
; - EXEC test2 ,
121 %
~'i Messages
.~sg 201, :..eve: 16, State 4 ~ P~cn.:.edu:=e r..eat2, Line 0 [Ba-::::h St;ar-::. Line 'J]
~rc::"=dure er funcr.::..o:;~• t:eat2' e::•n::-=ci:.a para:T:.e1:er 1 @Anul ', \111 hi~h wa;, n o :.. su i:~<l 1 e d 4
9.5. Functii
•
definite de utilizator
in afara de setul de functii predefinite, SQL server permite utilizatorilor sa defineasca propriile
functii prin instructiuni Transact-SQL. 0 functie SQL, definitii de utilizator, grupeazii in cadrul unui
obiect SQL de sine stiitator o secventa de instructiuni SQL incapsulatii, ce poate fi reutilizatii ori de cate
ori este nevoie, in cadrul altor obiecte SQL Server (51].
Proceduri stocate # funcfii definite de utilizator
Functiile definite de utilizatori au rolul de a returna un rezultat, calculat conform unui algoritm
descris de utilizator ~i pot utiliza parametri in cadrul calculelor. in functie de tipul de rezultat returnat,
functiile definite de utilizatori pot fi clasificate in trei mari categorii: functii scalare, functii de tip tabel
simplu (Inline table-valued) ~i functii de tip tabel multi-instructiune (Multi-statement table-valued).
USE universitatea
GO
DROP FUNCTION IF EXISTS min_num;
GO
CREATE FUNCTION min_num(@a INT, @b INT)
RETURNS INT
BEGIN
DECLARE @c INT
Proceduri stocate 1ifuncfii definite de utilizator
121 %
~'II Results
10
( 1 r o w a f f e cc ed )
Functiile anterioare utilizau in calcul numai parametri de intrare, dar pot fi folosite ~i datele stocate
in baza de date. Fie se dore~te sii se realizeze o functie, care va avea 2 parametri - care specificii numele
studentului ~i va calcula suma balurilor acumulate in urma sesiunii de examene (evaluiiri) pentru studentul
dat.
S.QLQue1y7..sql - MV ... a (~'i'IV\marian (59))* -P X Object E>:piorer Details tabS queries.sq! -.,,tea {MV\marian {~2))
SELECT dbo . GetTot al\ 'Brasovianu' 'Teodo ra ' AS Total
GO
- SELECT TOP ( 3J Nume_Stu de nt ,
Prenume_Student ,
dbo . GetTotal Nume Student Prenume_Student : AS Total
FROM studenti
121 %
NumeBazaDate.NumeSchemaFunctie.NumeFunctie
Trebuie mentionat faptul cii o functie de tip scalar poate accepta zero sau mai multi parametri ~i va
returna o singurii valoare. Sunt folosite, de regulii, pentru a converti o valoare intr-alta. Functia scalarli nu
poate fi folositii in clauza FROM a unei instructiuni SELECT, insii pot fi utilizate in expresie-coloanli in
SELECT sau GROUP BY, conditiile WHERE sau HAVING.
tocate Pentru functiile de tip tabel simplu, sintaxa generala are forma:
umele
dentul CREATE FUNCTION [<nume_schema>.]<nume_functie>
( [ { <@nume_parametru> [AS] [<tip_nume_schema>.]<tip_date_parametru>
[=<valoare_implicita>] [ READONLY ]} [ , ... n] ] )
RETURNS TABLE
[WITH <optiune_functie> [ , ... n] ]
[AS]
RETURN [ ( ]<interogare SELECT> [ ) ]
[ ; ]
Definitia functiei (RETURNS TABLE) indica faptul ca ea returneaza unset de date sub forma unui
tabel bidimensional. Tabelul (<interogare SELECT>) - este ins~i interogare, al carei rezultat va fi
nt
returnat de functie.
Fie se dore~te sa se realizeze o functie asemanatoare viziunii exemplu/2 din capitolul 8, sectiunea
8.4.2. Spre deosebire de viziunea sus-numita, valoare pentru clauza WHERE, in aceasta functie, va fi
furnizata de parametrul@Ore. Textul functiei va fi criptat.
apart:ine
claratia DROP FUNCTION IF EXISTS disciplina_ore
GO
ri ~i va 1.21 %
Iara nu
m:l Results ~ii Messages
)ana 'in
Disciplina
............................................,
Nr_ore _plan_disciplina
lnfomlatica aplicata 46
' ····· ·· ····· ···· ····· ··· ········· ······· ··············· ····································
t. Sisteme de calcul 45
3. Programarea '1NEB 4S
m, mai
t Retele infomlatice 4S
ceduri,
,ts;
, poate
tat este
II'Illare, 9.5.3. Functii
, de tip tabel multi-instructiune
,
Un.ctiei
ul sau. Functiile de tip scalar admit utilizarea oricarui numar de instructiuni Transact-SQL, dar intorc un
singur rezultat - un scalar. Al doilea tip de functii definite de utilizator poate returna un tabel, dar corpul
Proceduri stocate §i June/ii definite de utilizator
acestuia reprezinta doar o singura interogare. Functiile de tip tabel multi-instructiune returneaza o solutie
care imbina primele doua tehnici, ~i anume, ele contin o multime de instructii Transact-SQL in calitate de
corp, ~i intorc un tabel in calitate de rezultat.
Sintaxa acestor functii:
tabel cu trei campuri: Nume de tip VARCHAR, Suma_Baluri de tip SMALLIN T ~i Grupa de tip CHAR.
Prima instructiune din corpul functiei valideaza valoarea parametrului de intrare ~i, in caz de e~ec, foqeaza
ie~irea din corpul functiei. Daca IF reu~e~te, in tabelul @ret, se inregistreaza setul de date returnat de
SELECT ~i, in final, se executa ultimul operator RETURN.
Executarea functiei deloc nu se deosebe~te de apelarea functiilor examinate interior. De exemplu,
urmatoarea interogare selecteaza toate datele care sunt returnata de functie :
2
. 1.21 '%
u
0
9.5.4. Modificarea fi suprimarea funcfiilor definite de utilizator
ti
9.5.4. 1. Modificarea functiilor definite de utilizator
I I
Modificarea unei functii este posibila numai printr-o instructiune Transact-SQL DDL - ALTER
FUNCTION. Intr-adevar, in acest caz, instructiunile CREATE FUNCTION ~i ALTER FUNCTION au
a
;i
aproape aceea~i functie, deoarece, in ambele cazuri, intregul corp al functiei trebuie sa fie rescris in
;i
intregime. Nu este posibila adaugarea sau ~tergerea unei singure linii in ea. Singura diferenta consta in
faptul ca functia este creata sau modificata.
,-
De exemplu, este reprezentata modificarea unei functiei create interior:
t, ALTER FUNCTION disciplina_ore(@Ore INT)
d RETURNS TABLE
WITH ENCRYPTION
AS
RETURN
(SELECT Disciplina, Nr_ore_plan_disciplina
FROM discipline
WHERE Nr_ore_plan_disciplina <@Ore);
Deci, se observa cu u~urinta ca singura modificare sintactica, care exista intre crearea ~i modificarea
unei functii, este inlocuirea cuvintelor-cheie CREATE FUNCTION cu cuvintele-cheie ALTER
FUNCTION.
Trebuie mentionat ca modificarea unei functii nu permite schimbarea numelui. in afara de aceasta,
nu se poate transforma o functie scalara intr-una de tip tabel multi-instructiune sau invers.
ii
8
'+'
[-±:,
universitatea
Database Diagrams
Tables
I
New lnline Table-valued Function ...
i,f~ Views New Multi-statement Table-valued Function ...
i±.~ External Resources
Modify
q,1 Synonyms
,_ Programmability Script Function as
If Stored Proeed u res View Dependencies
1:::· Functions
Policies
i::.i Table-valued Fu
ff ~ ~~- ""' Facets
1£) ~ dbo.GetTota Start Power5hell
1.+• Scalar-valued FL
81 Aggregate Fune Reports
l}I Sys.tern Functior
Rename
r+i Databa se Triggers
Assemblies Delete
(£
U· Types
in ce prive~te limbajul Transact-SQL, metoda este acee~i ca ~i pentru orice alt obiect din baza de
date. Astfel, este folosita instructiunea DROP ~i adaptata la cazul unei functii. Iata metoda de suprimare a
unei functii, folosind codul Transact-SQL:
intrebari de control:
1. Proceduri stocate, facilitati de utilizare.
2. Clasificarea procedurilor stocate.
n baza de 3. Structura procedurilor stocate. Parametri de intrare ~i de ie~ire.
primare a 4. Metodele de creare ~i gestionare a procedurilor stocate
5. Rolul functiei definita de utilizator de tip scalar.
6. Caracteristicile functiei definite de utilizator de tip tabel simplu.
orice tip. 7. Instructiunile de modificare ~i suprimare ale functiilor definite de utilizator.
8. Principalele diferente dintre procedura stocata ~i functia definita de utilizator.
Sarcini practice:
~aza unul 1. Sa se creeze proceduri stocate in baza exercitiilor (2 exercitii) din capitolul 4. Parametrii de
De~i pot intrare trebuie sa corespunda criteriilor din clauzele WHERE ale exercitiilor respective .
.tor, fie o 2. Sa se creeze o procedura stocata, care nu are niciun parametru de intrare ~i poseda un
parametru de ie~ire. Parametrul de ie~ire trebuie sa returneze numarul de studenti, care nu au
.., . sustinut eel putin o forma de evaluare (nota mai mica de 5 sau valoare NULL) .
·i de cate 3. Sa se creeze o procedura stocata, care ar insera in baza de date informatii despre un student
nou. in calitate de parametri de intrare sa serveasca datele personale ale studentului nou ~i
codului Cod_ Grupa. Sa se genereze toate intrarile-cheie necesare in tabelul studenti_reusita. Notele
tata. Prin de evaluare sa fie inserate ca NULL.
·e, reduc 4. Fie ca un profesor se elibereaza din functie la mijlocul semestrului. Sa se creeze o procedura
stocata care ar reatribui inregistrarile din tabelul studenti_reusita unui alt profesor. Parametri
~ coduri. de intrare: numele ~i prenumele profesorului vechi, numele ~i prenumele profesorului nou,
.te trim.is disciplina. in cazul in care datele inserate sunt incorecte sau incomplete, sa se afi~eze un
mesaj de avertizare.
5. Sa se creeze o procedura stocata care ar forma o lista cu primii 3 cei mai buni studenti la o
disciplina, ~i acestor studenti sa le fie marita nota la examenul final cu un punct (nota
lr set. 0 maximala posibila este 10). in calitate de parametru de intrare, va servi denumirea disciplinei.
rezultate Procedura sa returneze urmatoarele campuri: Cod_ Grupa, Nume_Prenume_Student,
Disciplina, Nota_ Veche, Nota_ Noua.
intrare. 6. Sa se creeze functii definite de utilizator in baza exercitiilor (2 exercitii) din capitolul 4.
metri de Parametrii de intrare trebuie sa corespunda criteriilor din clauzele WHERE ale exercitiilor
respective.
poate fi 7. Sa se scrie functia care ar calcula varsta studentului. Sa se defineasca urmatorul format al
functiei: <numeJuncfie>(<Data_ Nastere_Student>).
Proceduri .stocate ~i /uncfii definite de utilizator
8. Sa se creeze o functie definita de utilizator, care ar returna datele referitoare la reW?ita unui
student. Se define~te urmatorul format al functiei: <numeJuncfie>
(<Nume_Prenume_Student>). Sa fie afi~at tabelul cu urmatoarele campuri:
Nume_Prenume_Student, Disticplina, Nota, Data_Evaluare.
9. Se cere realizarea unei functii definite de utilizator, care ar gasi eel mai sarguincios sau eel
mai slab student dintr-o grupa. Se define~te urmatorul format al functiei: <numeJuncfie>
(<Cod_ Grupa>, <is_good>). Parametrul <is_good> poate accepta valorile "sarguincios" sau
"slab", respectiv. Functia sa returneze un tabel cu urmatoarele campuri Grupa,
Nume_Prenume_Student, Nota Medie , is_good. Nota Medie sa fie cu precizie de 2
zecimale.
Crearea ~i utilizarea declan~atoarelor
lUl
e>
ri:
10. CREAREA $1 UTILIZAREA DECLAN$ATOARELOR
eel
ie> Capitolul este dedicat gestionarii ~i executarii declan~atoarelor de catre SQL Server 2017. in
au particular, sunt analizate declan~atoarele de tip DML, DDL ~i LOGON, descrise structura declan~atoarelor,
pa, precum ~i tratata prohlematica cu privire la crearea ~i executarea declan~atoarelor.
2 Microsoft SQL Server 2017 ofera doua mecanisme principale pentru implementarea a ceea ce in
aplicatiile de haze de date poarta numele de business rules: constrangerile ~i declan~atoarele. Termenul se
referli la acele reguli, restrictii, care tin in mod inerent de structura hazei de date ~i sunt induse de
semantica unei colectii de date, fiind comune tuturor aplicatiilor care folosesc aceasta haza de date ~i
independente de fiecare aplicatie in parte.
Declan~atoare AFTER
Decl~atoarele AFTER sunt lansate dupa executarea reu~ita a instructiunilor INSERT, UPDATE
sau DELETE. Specificarea AFTER este identica cu specificarea FOR, care este singura optiune
disponibila in versiunile mai vechi ale Microsoft SQL Server. Declan~atoarele AFTER pot fi
definite numai asupra unui singur tabel.
Declan~atoare INSTEAD OF
Declan~atoarele INSTEAD OF sunt executate in locul actiunii uzuale de declan~are. Declan~atoarele
de acest tip pot fi, de asemenea, definite asupra viziunilor, care, la randul lor, sunt construite din mai
multe tabele. Acestea pot extinde tipurile de actualizari pe care o viziune poate sale suporte.
Declan~atoare CLR.
Un declan~ator CLR poate fi sau un declan~ator AFTER, sau un declan~ator INSTEAD OF. Un
declan~ator CLR poate fi, de asemenea, un declan~ator de tipul DLL. in locul executarii unei
proceduri stocate, un declan~ator CLR executa una sau mai multe metode scrise in cod controlat,
care sunt parte a unei multimi create in .NET Framework ~i incarcate in SQL Server.
Instructiunile declan~atoarelor DML folosesc doua tabele speciale: tabelul deleted ~i tabelul
inserted. Sistemul SQL Server creeaza ~i gestioneaza aceste tabele in mod automat. Tabelele mentionate
sunt temporare, rezidente in memorie ~i pot fi utilizate pentru a testa efectele unor modificari de date ~i
pentru a seta conditii asupra actiunilor declan~atoarelor de tip DML. Nu este posibila modificarea directa a
datelor in aceste tabele sau efectuarea instructiunilor DDL ca, de exemplu, CREATE INDEX.
Astfel, tabelul deleted contine linii in starea de pana la aplicare instructiunii DML, iar tabelul
inserted - in starea de dupa aplicarea instructiunii DML.
Declan~atoarele DDL pot fi utilizate pentru administrarea sarcinilor, precum cele de audit ~i reglare a
operatiilor asupra bazei de date sau server.
nt. Declan~atoarele DDL sunt utilizate atunci cand:
• Se cere prevenitii orice modificare a schemei bazei de date.
• Se cere mregistrarea modificarilor sau evenimentelor ce au avut loc in schema bazei de date.
• Se dore~te sa se produca ceva in baza de date, ca riispuns la modificarea schemei bazei de date.
UPDATE Declan~atoarele DDL sunt puse in functiune numai dupa ce este executatii vreo instructiune de
a optiune definire a datelor, adica acestea nu pot fi declan~atoare de tipul INSTEAD OF. Prin urmare,
R pot fi declan~atoarele DDL se lanseaza drept raspuns la un eveniment specificat de sintaxa limbajului de definire
a datelor al Transact-SQL. in plus, declan~atoarele DDL reactioneaza numai la evenimentele care se
petrec in baza de date curentii sau pe serverul curent.
Trebuie mentionat ca declan~atoarele DDL nu utilizeaza tabelele speciale inserted sau deleted. In
n~atoare le
afara de aceasta, pentru un eveniment DDL pot fi create mai multe declan~atoare.
e din mai
e.
10.1.3. Declanfatoare Logan
Declan~atoarele Logan sunt proceduri stocate care se lanseaza ca riispuns la un eveniment LOGON.
:>OF. Un Acest eveniment apare atunci cand este stabilita o sesiune utilizator cu o instanta SQL Server.
Declan~atoarele Logan se lanseaza dupa ce faza de autentificare a logarii este in final, dar inainte de
tarii unei
controlat, stabilirea sesiunii utilizatorului. Prin urmare, toate mesajele care provin din interiorul declan~atorului care
in mod obi~nuit le prime~te utilizatorul, cum ar fi mesajele de eroare sau mesajele de la instructiunea
PRINT, sunt indreptate in jurnalul de erori al sistemului SQL Server. Declan~atoarele Logan nu se
~i tabelul lanseaza, daca autentificarea e~ueaza.
tentionate
Declan~atoarele Logon sunt folosite pentru auditul ~i controlul sesiunilor serverului, cum ar fi
de date ~i
t directa a urmarirea activitiitii de autentificare, restrictionarea accesului la sistem, sau limitarea numarului de sesiuni
pentru un anumit utilizator.
tr tabelul Evenimentul LOGON corespunde evenimentului AUDIT_LOGIN SQL Trace, care pot fi folosite 1n
notificarile de evenimente. Principala diferenta dintre decl~atoare ~i notificarile de evenimente consta in
faptul ca declan~atoarele se lanseaza sincron cu evenimentele, in timp ce notificarile se lanseaza asincron.
Acest lucru lnseamna ca, daca se dore~te oprirea unei sesiuni deja stabilite, trebuie folosit un declan~ator
l
Logan. 0 notificare de evenimentul AUDIT_LOGIN nu poate fi folositii in acest scop.
;TICS.
Crearea 1i utilizarea declan1atoarelor
in plus, urmatoarele instructiuni ale Transact-SQL nu sunt permise in corpul declan~atorului DML,
atunci cand este utilizat asupra tabelului sau viziunii care constituie ~i scopul actiunii declan~atorului:
CREATE INDEX (inclusiv ALTER INDEX DROP INDEX
CREATE SPATIAL INDEX ~i
CREATE X ML INDEX)
DBCC DBREINDEX ALTER PARTITION F UNCTION DROP TABLE
A LTER TABLE cand e utilizata pentru:
• Adaugarea, modificarea sau suprimarea coloanelor.
• Comutarea partitiilor.
. . . ~. . . . . A4!~gl:lt:~~ . ~.~~. . ~~P!!.11:1.l:lt:t':~ . ~9.l!~~~g~!ilg! .fB!M1.B.r . 4§r . ~.~~. r!Jj!Qf!§ · · · · · · · · · · · · · · · · -- · · · · · · · · · · · · · · ·-· ·-· ·
Pentru crearea declan~atoarelor in limbajul Transact-SQL, se folosesc trei tipuri de instructiuni.
Declan~atoarele pentru controlul actualizarilor (declan~atoarele DML) sunt bazate pe instructiunile
definite asupra unui tabel sau viziuni.
ML, in continuare, sunt propuse unele explicatii ale termenilor utilizati in descrierea structurilor
declan~atoarelor.
nume schema
Este numele schemei la care se refera declan~atorul DML. Declan~atoarele DML sunt orientate spre
schema tabelului sau viziunii pentru care acestea sunt create. Numele schemei nu poate fi specificat
pentru declan~atoarele de tip DDL sau LOGON.
tabel I viziune
unile Reprezinta tabelul sau viziunea pe care e definit declan~atorul DML. Specificarea numelui complet
al tabelului sau viziunii este opfionala. 0 viziune poate fi referita numai de catre un declan~ator de
tip INSTEAD OF. Declan~atoarele DML nu pot ft definite pe un tabel temporar local sau global.
DATABASE
Se define~te in calitate de domeniu de aplicare a unui declan~ator DDL. Reprezinta numele bazei de
date curente. Daca numele este specificat, decl~atorul este lansat intotdeauna cand in baza de date
curenta au loc evenimentele tip_ eveniment sau grup_ eveniment.
ALL SERVER
Se define~te in calitate de domeniu de aplicare a unui declan~ator DDL sau LOGON. Reprezinta
numele serverului curent. Daca numele se specifica, declan~atorul se lanseaza intotdeauna cand pe
serverul curent au toe evenimentele tip_eveniment sau grup_eveniment.
WITH ENCRYPTION
Se cripteaza textul instructiunii de creare a declan~atorului. Utilizarea clauzei WITH ENCRYPTION
IT, previne faptul ca decl~atorul sa fie publicat ca parte a unei replicari SQL Server. Aceasta opfiune
nu poate fi specificata pentru declan~atoare CLR
EXECUTE AS
Specifica contextul de securitate in care este executat declan~atorul. Permite determinarea contului
utilizatorului (pe instanta SQL Server) utilizat pentru validarea permisiunilor asupra oricarui obiect
al bazei de date, la care se refera declan~atorul.
FOR I AFTER
AFTER specifica faptul ca declan~atorul DML este executat doar cand toate operatiile din enuntul
SQL al declan~atorului au fost executate cu succes. Toate actiunile referentiale in cascada ~i
verificarile de constrangeri, de asemenea, trebuie sa reu~easca inainte de executarea acestui trigger.
Optiunea AFTER este implicita in cazul cand FOR este singurul cuvant--cheie specificat. Adica.
folosirea clauzei AFTER este identica cu folosirea clauzei FOR utilizata mai mult in ultimele
versiuni de SQL Server. in plus, declan~atoarele AFTER nu pot fi definite pentru viziuni.
Crearea # utilizarea declan~atoarelor
INSTEAD OF
Specifica faptul ca declan~atorul DML este executat in locul instructiunilor de actualizare
specificate. Opfiunea INSTEAD OF nu poate fi specificata pentru declan~atoarele de tip DDL sau
LOGON.
Asupra unui tabel sau viziuni poate fi definit eel mult un declan~ator INSTEAD OF pentru
instructiunile INSERT, UPDATE, sau DELETE. Cu toate acestea, este posibila definirea viziunilor
asupra altor viziuni, unde fiecare din acestea sa posede propriul declan~ator cu optiunea INSTEAD
OF.
Declan~atoarele INSTEAD OF nu pot fi create asupra viziunilor actualizabile care utilizeaza clauza
WITH CHECK OPTION in acest caz, sistemul lanseaza un mesaj de eroare. Utilizatorul trebuie sa
inlature optiunea WITH CHECK OPTION, apeland la instructiunea ALTER VIEW inainte de a
defini pe viziunea data un declan~ator INSTEAD OF.
tip_eveniment
Este numele unui eveniment Transact-SQL, care, dupa executare, cauzeaza lansarea unui
declan~ator DDL.
grup_eveniment
Este numele unui grup de evenimente. Declan~atoarele DDL sunt lansate dupa aparitia oricarui
eveniment ce face parte din grupul de evenimente specificat.
Dupa executarea instructiunii CREATE TRIGGER, grup_eveniment actioneaza, de asemenea, ca un
macrou, prin adaugarea tipurilor de evenimente ce fac parte din viziunea de sistem
sys.trigger_ events.
instructiune_sql
Reprezinta conditiile ~i actiunile declan~atorului. Conditiile sunt ni~te criterii aditionale, care
trebuie verificate pentru a fi lansat declan~atorul in urma aparitiei unui eveniment DML, DDL sau
LOGON.
specificator_metoda
Se aplica la: SQL Server 2008 prin SQL Server 2017.
Se utilizeaza pentru decl~atorul CLR ~i specifica metoda de asamblare a legaturilor cu
declan~atorul. Metoda nu trebuie sa ia nici un argument ~i trebuie sa returneze void. Argumentul
nume _ clasa trebuie sa fie un identificator valid in sistem ~i trebuie sa existe ca o clasa cu acest
nume vizibila in ansamblu In cazul in care clasa are un nume cu utilizare a punctului pentru
separarea spatiului de nume, atunci numele se ia in paranteze patrate, [], sau in ghilimele, "". Clasa
nu poate fi una imbricata.
~~-----------------------------
Crearea fi utilizarea declan1atoarelor
SQLQuery1 ,sql - MV.,.a (Mli\ marian (57))* ;. X queries for Lab09.s.,,ea {MV\martan (56)) Object Exprorer 0
1 1
unui INSERT oraru l VALUES (108 , 108 )2 .• 'Lu' . '08:00' }501 , 8
1
2 GO
:S ~-:SELECT " FROM orarul ;
icarui 121 %
@j'i Results
ca un 0 ncua i nregis t rare a f eat inc:uaa cu aucces
istem
( 1 row affe c ted )
Id_ Disci i:: li na I d Profes or Id Grupa z:.. Ora Audi to riu Blee
l l r::w affect ed )
care
J sau Sa se observe ca, independent de structura instructiunilor, care se utilizeaza, de acum inainte,
intotdeauna, cand va fi utilizata instructiunea INSERT asupra tabelului orarul, va fi afi~at mesajul "O
nouii inregistrare a Jost inclus a cu succes ".
in exemplul urmator, este creat un declan~ator care nu permite ~tergerea completa a lectiilor de
Luni, adicii Zi='Lu' . Declan~atorul respectiv poate fi activat dupa operatiile UP DATE ~i DELETE In cazul
r cu daca numiirul de inregistrari in tabel orarul pentru care Zi='Lu' este mai mic de 1, apare un mesaj de
~ntul avertizare, iar operatiile ce au provocat lansarea declan~atorului sunt derulate inapoi.
tcest in final, se executa o instructiune de control DELETE ~i se obtine mesajul respectiv.
:ntru
'.las a
Crearea # utilizarea declan~atoarelor
@'ii Messages
Nsq 50000, :..~ve: 16, Stat.e .:, P:=:ccedu~e :e.:::tii__ Lun:, I.in~ ?- tBa'tc:h 5t.ar:: :::.ne l~ ~
.A::~nr..:~, :..u:-..:. ':r~bu:.e ,:sa f:.~ c~l. put:.:-. :: :ectie..
La formarea mesajului de avertizare, este utilizata functia CHAR, care converte~te valorile ASCII in
caracter. in exemplu, CHAR(l 3) indica cursorului trecerea in rand nou [9]. in ~a fel, mesajul de
avertizare, ce vine din corpul declan~atorului, este separat vizual printr-un spatiu.
Ca ~i alte obiecte ale bazei de date, declan~atoarele DML suporta instructiunile ALTER ~i DROP.
Pentru modificarea unui declan~ator DDL, acesta, mai intai, trebuie sa fie ~ters ~i apoi creat din nou.
Urmatorul exemplu modifica declan~atorul inregistrare_noua. Declan~atorul utilizeaza tabelul
inserted pentru crearea raportului despre valorile actualizate ale coloanei Auditoriu a tabelului pe care este
definit acest declan~ator.
( 1 r aw ~ ff e c ce d l
Crearea ~; utilizarea declan~atoarelor
ROLLBACK ;
1~ GO
USE universitatea;
GO
DROP TRIGGER IF EXISTS limit_sesiuni ON ALL SERVER;
GO
IF EXISTS (SELECT * FROM sys. server _principals WHERE name 'userl')
DROP LOGIN userl;
GO
CREATE LOGIN userl WITH PASSWORD 'parolal';
GO
BEGIN
IF ORIGINAL_LOGIN()= 'userl' AND
(SELECT COUNT(*) FROM sys.dm_exec_sessions
WHERE is_user_process = 1 AND original_login_name ='user1')>3
ROLLBACK;
END;
Instructiunile de pe liniile 3 ~i 6 verifica daca, deja, exista in sistem vreun declan~ator ~i vreun login
cu un asemenea nume. Daca asemenea obiecte sunt gasite, acestea sunt suprimate. Viziunea
sys.server_principals contine informatii despre toate conturile de utilizator existente la nivel de server
[54].
Instructiunea CREATE LOGIN creeaza un login cu un nume ~i parola definite. Deoarece pentru
loginul creat nu sunt explicit specificate drepturile de acces, implicit i se atribuie rolul PUBLIC.
Pe linia 11 incepe instructiunea de creare a declan~atorului care interzice intrarea in sistem a unui
utilizator, daca acesta, deja, are trei sesiuni active create cu acest login pe o instanta SQL Server.
Interogand viziunea sys.dm_exec_sessions, declan~atorul obtine numarul de sesiuni active cu loginul dat.
Daca numarul dep~e~te conditia, operatiunea de loghinare este rulata inapoi.
USE universitatea
GO
DISABLE TRIGGER inregistrare_noua ON orarul;
GO
ENABLE TRIGGER inregistrare_noua ON orarul;
GO
Urmatorul exemplu dezactiveaza un declan~ator DDL la nivelul bazei de date.
USE universitatea
GO
DISABLE TRIGGER siguranta ON DATABASE;
Dezactivarea sau activarea unui declan~ator DML pot fi realizate ~i in cadrul instructiunii ALTER
TABLE, ~a cum este prezentat in exemplul de mai jos:
USE universitatea
GO
ALTER TABLE orarul DISABLE TRIGGER inregistrare_noua;
Exemplul de maijos dezactiveaza un declan~ator DDL la nivelul unui server:
USE universitatea
GO
DISABLE TRIGGER limit sesiuni ON ALL SERVER;
Crearea fi utilizarea declan1atoarelor
USE universitatea
GO
ENABLE TRIGGER ALL ON ALL SERVER;
earea
_ -:- SP HELPTRIGGER orarul' 1
nu se
~ctie 121 %
in acest exemplu, sunt afi~ate declan~atoarele existente asupra tabelului orarul al bazei de date
universitatea.
Acum, fie ca se dore~te prezentarea continutului unui declan~ator DML. Pentru aceasta, se apeleaza
la procedura stocata deja cunoscuta din lucrarea practica precedenta:
Aplicand procedura sp_ helptext, pot fl observate toate instructiunile care formeaza corpul
decl~atorului.
Crearea # utilizarea declan1atoarelor
intrebari de control:
1. Care sunt domeniile de utilizare a declan~atoarelor?
2. Tipurile de declan~atoare DML.
3. Utilizarea tabelelor deleted ~i inserted
4. Declan~atoarele DDL. Care sunt caracteristicile principale ale acestor declan~atoare?
5. Declan~atoarele LOGON. Avantajele utilizarii.
6. Crearea declan~atoarelor in T-SQL, sintaxa de baza.
7. Activarea - dezactivarea declan~atoarelor in T-SQL. Utilizare ~i sintaxa de baza.
8. Cum pot fi vizualizate metadate despre declan~atoare?
Sarcini practice:
1. Sa se modifice declan~atorul inregistrare_ noua, in a§a fel, incat in cazul actualizarii
auditoriului sa apara mesajul de informare, care, in afara de disciplina ~i ora, va afi~a codul
grupei afectate, ziua, blocul, auditoriul vechi ~i auditoriul nou.
2. Sa se creeze declan~atorul, care ar asigura popularea corecta (consecutiva) a tabelelor studenti
~i studenti_reusita, ~i ar permite evitarea erorilor la nivelul cheilor exteme.
3. Sa se creeze un declan~ator, care ar interzice mic~orarea notelor in tabelul studenti_reusita ~i
modificarea valorilor campului Data_Evaluare, unde valorile acestui camp sunt nenule.
Declan~atorul trebuie sa se lanseze, numai daca sunt afectate datele studentilor din grupa
,,CIB 171 ". Se va afi~a un mesaj de avertizare in cazul tentativei de a incalca constrangerea.
4. Sa se creeze un declan~ator DDL care ar interzice modificarea coloanei ld_Disciplina in
tabelele bazei de date universitatea cu afi~area mesajului respectiv.
5. Sa se creeze un declan~ator DDL care ar interzice modificarea schemei bazei de date in afara
orelor de lucru.
6. Sa se creeze un declan~ator DDL care, la modificarea proprietatilor coloanei ld_Profesor
dintr-un tabel, ar face schimbari asemanatoare in mod automat in restul tabelelor.
Recuperarea bazei de date
ii 0 copie a datelor, care poate fi folositli pentru recuperarea ~i restabilirea datelor, se nume~te copie
ul de rezerva sau backup. Prin utilizarea backupurilor de calitate poate fi asiguratli protectia datelor dupli o
serie de e~ecuri, cum ar fi:
nti • Erori ale utilizatorilor, de exemplu, ~tergerea din gre~ealli a unui set de date sau a unui tabel.
• Erori provenite din cauza hardware-ului, de exemplu, deteriorarea unei unitliti de disc sau
l?i pierderea completli a unui server.
le. • Dezastre naturale.
pa
in plus, copiile de rezervli ale unei haze de date pot fi utile in scopuri administrative de rutinli, cum
ar ft copierea bazei de date de pe un server pe altul, crearea unei oglinzi a bazei de date sau arhivarea.
Inainte de a trece la analiza detaliatli a procesului de creare a copiilor de rezervli, se vor examina trei
modele posibile de recuperare a bazei de date.
ira
Un backup complet al bazei de haze (Full database backup) include toate obiectele bazei de date,
tabelele de sistem ~i datele. Tranzactiile care au loc in timpul procesului de creare a copiei de rezerva sunt,
de asemenea, lnregistrate. Backupurile complete ale bazei de date permit o restabilire completa a bazei de
date, care a existat la momentul efectuarii operatiei de creare a copiei de rezerva.
! creat in
11.1.7. Backupuri a/ejurnalului de tranzacfii (modelele complete §i Bulk-Logged)
Modelele de recuperare completa sau bulk-logged, presupun executarea sistematica a backupurilor
il in care jurnalelor de tranzactii (sau backupul jurnalelor). Fiecare backup al jumalului se refera la o parte din
jurnalul de tranzactii, care a fost activ in momentul crearii backupului, ~i include toate inregistrarile de
jumal care nu au fost salvate in backupul precedent. 0 succesiune neintrerupta de backupuri ale jurnalelor
contine lantul complet de jurnale ale bazei de date, care se considera neintrerupt. in modelul de recuperare
extenduri completa, iar uneori ~i In modelul de recuperare Bulk-Logged, un lant neintrerupt de jumale permite
restaurarea bazei de date pana la orice moment de ti.mp.
lnainte de crearea primului jurnal de rezerva, mai intai, trebuie creat un backup complet al bazei de
date. Apoi, sistematic, se fac backupuri ale jumalului de tranzactii nu numai pentru a minimiza pierderile
rezultatelor muncii, dar ~i pentru a trunchia jurnalul de tranzactii.
Recupemrea bazei de date
De obicei, un backup al jurnalului de tranzactii are loc chiar daca unul sau mai multe fi~iere de date
nu sunt disponibile. Cu toate acestea, pentru executarea cu succes a backupului, in cazul in care eel putin
un fi~ier contine modificari bulk-logged (masive) petrecute In modelul de recuperare bulk-logged, toate
1Werele trebuie sa fie online.
~terge un fi~ier al bazei de date, operatia de copiere va fi amanatii panii la terminarea operatiei de creare
sau de ~tergere a fi~ierului sau timpul cand trebuie formatii copia de rezervii poate fi dep~it.
denta de Urmiitoarele operatii nu pot fi executate in timpul unui backup al bazei de date sau unui backup al
mul SQL jurnalului de tranzactii:
copiilor • Operatiile de gestionare a fi~ierelor, cum ar fi instructiunile ALTER DATABASE cu optiunile
obale de ADD FILE sau REMOVE FILE.
e rezervli • Operatiile de comprimare a bazei de date sau de comprimare a unui fi~ier. Aici se includ ~i
operatiile de autocomprimare.
• Operatiile de creare sau ~tergere a unui fi~ier din baza de date in timp ce operatia de backup este
in curs. Operatia de creare sau de ~tergere e~ueazii.
tialli, nici in cazul in care operatia de creare a copiei de rezervii se suprapune cu o operatie de gestionare a
area unei fWerelor sau o operatie de comprimare, apare un conflict. Indiferent de faptul care din operatiile ce
conflictualizeazii a fost lansata prima, cea de-a doua operatie ~teapta expirarea timpului de blocare stabilit
de prima operatie (perioada pauzei este controlatii de setarea sesiunii time-out.). in cazul in care
deblocarea are loc panii la expirarea timpului perioadei de pauza (time-out), cea de a doua operatie
Copia de continua. in caz contrar, a doua operatie e~ueazii.
afecteaza
nutile. Cu Este cunoscut faptul ca un backup in baza de date este o operatie de copiere a datelor pe un
nd WITH dispozitiv fizic. Acest lucru poate fi realizat, folosind SQL Server Management Studio sau instructiunea
e necesare BACKUP.
u pentru a Precum s-a reiterat, pentru a face un backup, nu se cere stoparea sistemului sau deconectarea de la
sistem a utilizatorilor acestuia. Copierea se realizeazii cu utilizatorii conectati, dar, totu~i, trebuie
mentionat cli, in acest timp, in unele cazuri poate sciidea performanta sistemului. Din acest motiv, se alege
ora cu cea mai mica activitate a serverului.
te acestea,
11.3. Crearea copiilor de rezerva
a la date Un dispozitiv backup reprezinta un disc dur sau alt dispozitiv de depozitare a datelor care contine
unul sau mai multe fi~iere backup. Un fi~ier backup este un fi~ier obi~nuit al sistemului de operare.
n baza de Dimensiunea maximalii a fWerului backup este determinatii de spatiul disponibil pe dispozitiv. Prin
1purile de unnare, dimensiunea potrivita pentru un dispozitiv backup depinde de dimensiunea fi~ierelor backup.
Se recomanda ca fi~ierele backup sa fie pastrate pe dispozitive aparte de baza de date sau fi~ierele
~ierele ce log. Acest lucru este necesar pentru a garanta accesul la fi~ierele backup in cazul defectarii discurilor cu
date sau loguri Gurnale de tranzactii).
'Conectat, Un dispozitiv backup pe interfata Management Studio nu este altceva decat un pointer spre locul in
rtial sunt care backupul bazei de date va fi plasat. in SQL Server Management Studio poate fi creat un dispozitiv
backup al oriclirei instante, sau se poate crea cand, de facto, se face un backup al bazei de date. Un
operativ dispozitiv backup poate specifica numele unui fi~ier pe discul rigid care va fi scris cand backupul va fi
ackup al executat, sau poate fi specificata o unitate extema de banda.
ratia. Pentru definirea unui dispozitiv backup in SQL Server Management Studio, se procedeazii in
e de date modul urmator:
eel putin I . In Object explorer se extinde serverul care va receptiona backupul.
·ed, toate 2. Se extinde dosarul Server Objects
3. Se face un click cu butonul drept al mouse-ului pe dosarul Backup Devices
4. In meniul de context, care s-a deschis, se selecteaza optiunea New Backup Device
: in timp In acest punct, va fi deschisa fereastra Backup Device:
bile. De
creare a
;a sau se
Recuperllrea bazei de date
Backup Device
Select a~ !J Script ,.. Help
,II General
Device o.arne :
Destination
•! · Rle F \ DBBACKUP
Connection
Server:
MV
Connection :
M\1\marian
Pr~
Ready
OK Cancel
0 Cop~-only backup
Backup component :
o.! I Data\lase
Destination
Back \JP to : Disk
Cancel
Connedion
f~~g:111~fftl't'fii~.fajif.! m m•·wa •mmljTJ m ----·; fl.4d _
Seiver:
1 care va ft MV fiemove
!ge numele Connection:
MV'-111anan [;ontents
Progress
1pe (banda
Ready
netice este
de backup
OK Cancel
:>. Campul
3. in meniul derulant Database, se selecteaza baza de date care va fi copiata.
1 cauza $i 4. in Recovery model, poate fi vazut modelul folosit pentru restabilire (SIMPLE, FULL sau
BULK LOGGED) afi~at pentru baza de date selectata.
mtru care 5. in Iista de selectie Backup type, se selecteazli tipul de backup (Full, Differential sau
Transaction log) care va fi executat asupra bazei de date specificate. in cazul nostru, este
in partea aleasli optiunea Full (complet).
Files, se 6. In grupul Backup component, se selecteazli componentele bazei de date pentru care vor fi
lillele lui create copii de rezerva. Dacli in Backup type este selectata optiunea Transaction Log,
aceasta optiune nu este accesibila. Poate fi selectata una din urmatoarele 2 optiuni: Database,
'. erului ~i Files andfilegroups.
7. in Destination, se selecteazli destinatia ~i tipul acesteia - Disk sau URL. Pentru selectarea
~es . dispozitivului, se face un click pe butonul Add.
Dacli se alege optiunea Disk, in acest punct, va aparea o casetli de dialog care permite
cautarea dispozitivelor backup logice ~i fizice existente.
Recuperarea bazei de date
Daca se selecteaza URL, sistemului i se indica faptul ca pentru stocarea fi~ierelor backup
utilizatorul dore~te sa utilizeze serviciu Microsoft Azure Blob Storage . Atunci, <land click pe
butonul Add, va fi nevoie de specificat URL-ul containerului Azure sau de ales din cele,
deja, definite [50].
8. In cazul nostru se alege optiunea implicita (Disk) ~i in caseta de dialog, se face un click pe
optiunea Backup device ~i se selecteaza unul din dispozitivele create pentru backup sau se
alege numele fi~ierului de pe discul rigid, ~i apoi se aplica un click pe butonul OK. Dupii
aceasta actiune, controlul procesului se intoarce ferestrei Back Up Database.
in fereastra Back Up Database, butoanele Remove ~i Contents au urmatoarele semnificatii:
• Remove suprima unul sau mai multe dispozitive din lista.
• Contents afi~eaza metainformatia despre dispozitivul selectat.
9. Dupa configurarea respectiva, e suficient sa se aplice un click pe butonul OK ~i, in acest
punct, va aparea o fereastra cu un mesaj despre crearea cu succes a copiei de rezerva.
10. In aceasta fereastra se aplica un click pe butonul OK ~i procesul este finalizat.
11.3.3. Vizualizarea copiei de rezerva
Realizarea backupului poate fi verificata. Pentru aceasta, se parcurg urmatorii p~i:
1. in Management Studio, se extinde serverul respectiv, apoi se extinde dosarul Server Objects
~i se face un click pe dosarul Backup Devices. Se poate observa ca, in acest punct, in partea
dreapta a ferestrei, se va gasi dispozitivul backup creat.
Acum, se aplica un dublu-click asupra dispozitivului backup. in acest punct, va apiirea
urmatoarea fereastra:
Destination
Connedion
Server:
MV
Connection:
sa
yif View connection properties
Progress
Ready
Cancel
2. in fereastra Backup device, sunt prezentate dispozitivul ~i calea acestuia, precum se vede
campul File. Pentru a vedea fi~ierele cu copiile propriu-zise, e suficient sa se aplice un click
pagina Media Contents din partea stanga a ferestrei:
Recuperarea bazei de date
ckup
k pe - Ll .. .
Backup Device - device01
cele, Select a page.
£T Script ... Help
1' General
k pe 1- C!l!!Uttt!fO
Media
au se
Media sequence: Media 1. Family 2
Du pa
Created on : 2/24/2018 11:ll4:31 PM
Media set
atii: Name :
Description :
Media family count : 2
Back@ sets :
acest
, Name
................ ..... ... ..... .. ........ ..... .... ......... .... ..................... .
T)'Pe Component Server Datab .. . Position
universitatea-Full Database Database Full MV univer ...
Connection
Server:
MV
bjects Connection :
sa
>artea
'ff View connection properties
Pr<>!JtSS
.p area
Ready
r- . <
OK Cancel
>
Aceasta fereastra contine informatii despre suportul de date individual, setul de suporturi de date
~i seturile de backupuri.
Media
Un disc sau un set de benzi magnetice pe care se stocheaza copia de rezerva.
Media Sequence
Afi~eaza numarul secvential al suportului de date, numarul secvential al grupului,
identificatorul oglinzii. Fiecare suport backup este dotat cu un numar secvential care indica
ordinea in care acest dispozitiv este utilizat.
Media Set
Un set de suporturi de date este o colectie ordonata de suporturi pentru care una sau mai multe
operatii backup au fost scrise prin utilizarea unui numar constant de dispozitive backup.
Name
Afi~eaza numele setului de suporturi de date, daca exista.
Description
Afi~eaza descrierea setului de suporturi de date, daca exista.
Fiecare set de suport de date contine o familie de suporturi separate pentru fiecare dispozitiv
(sau grup de dispozitive oglinda). De exemplu, in cazul in care unset de suporturi de date
folose~te doua dispozitive backup neoglinda, atunci setul de suporturi de date contine doua
familii de suporturi.
Backup sets
Afi~eaza informatia despre setul sau seturile de backupuri ce se contin pe suportul de date. Un
set backup este rezultatul unei operatii backup reu~ite, al carui continut este distribuit intre
suporturile din setul de dispozitive backup.
SQLQuery1.sql - L0 .. .01.ma,ter (.a (56))* .., X quenes for Lab1O.s,..V01.master (sa ('>4})
EX.EC s p_ ad dumpdevice ' DI SK' , 'de vi ce 02.' , ' F: \ DBBACKUP \ device0 2_ univers :i.tatea . bak'
1 GO
- BACKUP D/HABASE uni versitat e a
TO devi ce 02 WITH FORMAT NAME N' un iver s i tatea - Full Database Backup'
GO
121 % •
~'II Messages
Prcc e ss ~ d 56S pages for da taba ae ' u ~~ver 3~t atea ' , ~ ~le 1
universita~ea 1
en f i le 1 .
Prece s sed 16 pages for datat: a s e: ' un.:. vers.:..ta t ea ' , : ile 1
Universi~atea_=i1e2 1
en fi:.e 1.
Pr o c~saed 16 page9 for data.t:a.:i e 'u::.: ver s:.1:.a t ea 1 , : i le. 'Uni v ersi1:.a'te .~ _ !i.l e 3' o n f iie 1 .
Froc:esBe d 24: pag ~::: fe r d ataba .3e ' u:-ii ve: rs:.. ta. t e:a ' , : i.. le C'n :.ve r:~n.."ta"'te:i._::i1 e .r; · en f.i.l e 1.
1
Pr cce 9 sed 2 page3 fer d a cab a .:ie ~ un .: v ~r e~t a te ar , ~il e 'un i v e r9 i~atea_ lcg ' e n fi l e 1 .
EJtCKU~ D.~:A3ASE suc.::e3.=:fu::.y procea3ed 626 pagee in C . 250 3·eccn:ia ( 19.562 .MB / sec ) .
In exemplele de mai JOS, se definesc doua dispozitive backup logice noi backup_Files ~
backup_ Log. Instructiunea BACKUP LOG creeaza o copie de rezerva a jurnalului de tranzactii al bazei de
date universitatea. Instructiunea BACKUP DATABASE creeaza un backup pentru fi~ierele ce fac partedin
grup de fi~iere secundare ale bazei de date universitatea userdatafgroupOl. Fi~ierele copiate in ambele
cazuri de utilizare a instructiunii BACKUP sunt salvate pe dispozitivele backup respective.
USE master
GO
EXEC sp_addumpdevice 'DISK', 'backup_Files',
'F:\DBBACKUP\universitatea_Files.bak';
Recuperarea bazei de date
pozitiv GO
e date EXEC sp_addumpdevice 'DISK', 'backup_Log',
e doua 'F:\DBBACKUP\universitatea_Log.bak';
GO
BACKUP DATABASE [universitatea] FILEGROUP = N'userdatafgroup01'
TO backup_Files
te. Un GO
t intre BACKUP LOG universitatea TO backup_Log
GO
Instructiunea BACKUP poate contine ~i alte elemente, in functie de scopurile urmarite.
r. Mai Urmeaza un exemplu care afi~eaza informatii despre copia de rezerva:
•
1k'
..L fa, tail.Jog backup of the source database wiH be taken . View this setting on the Options page .
Select a page
JI General
1' R1es
I' Options
!J Script
Source
• ~ Help
D!llabase :
Destination
DataQ.ase · universitatea
Restore to: The last backup taken (Sunday, February 25, 2018 5:23:48 PM) Iune!ine ...
Restore plan
Bag<up sets to restore :
Comedian
Restore Name Compnnent Type Server Database Position First LSN
v¥ !~Visa)
universrtatea·Fufl Database Backup Database Full MV uncvern]:atea 1 41{)000003~
1
/es ~i log Transaction log MV universitatea 1 ~1COOOO.J3~
mbele Prowess
< >
'() Done
':f_e<ify Backup Media
OK Cancel Help
Recuperarea bazei de date
in fereastra Restore database, pagina General, sunt disponibile doua sectiuni de parametri:
Source ~i Destination.
2. Sectiunea Source se utilizeaza pentru specificarea sursei ~i locatiei copiilor de rezerva ce
trebuie restabilite. Sa se selecteze una din urmatoarele optiuni:
• Database. Din lista derulanta se selecteaza baza de date ce trebuie recuperata. Lista
contine numai acele haze de date, care au fost introduse in istoricul msdb copiilor de
rezerva.
Atunci cand copia de rezerva este luata de pe alt server, serverul destinatie nu va dispune
de istoricul acesteia pentru baza de date specificata. In acest caz, pentru a specifica
manual fi~ierul sau dispozitivul pentru restabilire, se selecteaza optiunea Device.
• Device. Faceti click pe butonul Browse (... ) pentru a deschide caseta de dialog Select
backup devices. in caseta Backup media type selectati unul din tipurile de dispozitive
disponibile. Pentru a selecta unul sau mai multe dispozitive backup, faceti un click pe
butonul Add.
Dupa adaugarea unitatilor dorite din lista Backup media, faceti click pe OK pentru a
reveni la pagina General.
Tot aici, m sectiunea Source, optiunea Device, lista Database se selecteazii numele bazei
de date ce trebuie restabilita.
3. in sectiunea Destination:
• Campul Database este automat populat cu numele bazei de date care urmeaza sa fie
restabilitii. Pentru a schimba numele bazei de date, se introduce numele nou In caseta
respectiva.
• in campul Restore to, pentru a lua ultimul backup, se lasa valoarea implicitii sau, pentru a
selecta manual o limita specifica pentru a opri actiunea de recuperare a bazei de date, se
face clic pe butonul Timeline.
4. in partea de jos a ferestrei se afla un grid, Backup sets to restore, unde se selecteaza
backupurile pentru restabilire. Aceasta grila afi~eaza copiile de rezerva disponibile pentru
locatia specificatii. in mod implicit, sistemul sugereaza un plan de restabilire. Pentru a inlocui
planul de restabilire sugerat, utilizatorul are posibilitatea sa debifeze obiectele selectate din
grila. Backupurile care depind de restabilirea unei copii de rezerva anterioare sunt automat
deselectate atunci cand backupul anterior este deselectat.
in cazul nostru m sectiunea Source, se alege sursa Device ~i se apasa butonul Browse. in
fereastra de dialog Select Backup Devices apiirutii, se alege, m campul derulant Backup Media
type, optiunea Backup Device ~i se giise~te numele dispozitivului backup necesar, apasand
butonul Add. Apoi, se apasa butonul OK.
. USE master
GO
RESTORE DATABASE universitatea FROM device01 WITH REPLACE;
Optiunea WITH REPLACE, m instructiunea de mai sus, indica faptul ca continutul curent al bazei
de date va fi suprascris de eel din backup. Suprascrierea bazei implicit indica faptul ca este nevoie de
acces exclusiv asupra bazei. Sesiunile active ale utilizatorilor ~i aplicatiilor pot crea probleme in acest
sens. Pentru a obtine accesul necesar, se poate indica sistemului oprirea sau rularea mapoi a tranzactiilor
active. Cu acest scop, pot fi utilizate instructiunile speciale, ca m exemplu ce urmeaza.
Recuperarea baz•
uni de parametri: Exemplul executa restabilirea backupului complet al bazei de date universitatea, dupa care i
o operatie de restabilire a jurnalului de tranzactii. Backupul jumalului de tranzactii face parte din b
complet al bazei de date. Prin aceasta, se explica folosirea acelui~i dispozitiv backup. inainte de ~
lor de rezerva ce
procesul de restaurare, se obtifle acces exclusiv la baza de date ~i toate tranzactiile active a
utilizatori sunt rulate inapoi prin mutarea bazei in regim SINGLE USER cu aplicarea cc
recuperata. Lista ROLLBACK.
msdb copiilor de
ALTER DATABASE universitatea SET SINGLE USER WITH ROLLBACK IMMEDIATE
atie nu va dispune GO
pentru a specifica RESTORE DATABASE universitatea FROM device02 WITH NORECOVERY, REPLACE;
aDevice. RESTORE LOG universitatea
a de dialog Select FROM DISK = 'F:\DBBACKUP\device02_universitatea.bak'
rile de dispozitive WITH RECOVERY;
faceti un click pe Precum se vede, restabilirea poate fi derulata, indicand numele dispozitivului de backu
indicand calea explicita catre un fi~ier *.bak.
k pe OK pentru a
Operatiile roll back ~i roll forward fac parte din planul general de restaurare a datelor In
Server. Daca are loc restabilirea jurnalelor de tranzactii, atunci SQL Server transcrie toate datele d
teaza numele bazei tranzactiile validate din jurnalul de tranzactii in baza de date. Aceasta operatie se nume~te roll fan
Apoi SQL Server detecteaza toate tranzactiile nevalidate ~i le anuleaza (roll back).
Optiunea NORECOVERY specifica faptul ca roll back-ul nu are loc. Acest lucru permite ope1
are urmeaza sa fie roll forward sa continue cu urmatoarea instructiune din secventa. in acest caz, se poate res1
mele nou 'in caseta succesiunea de backupuri ~i rularea lor inainte.
Optiunea RECOVERY (este implicita pentru sistem) indica faptul ca operatia roll back ar treb1
>licita sau, pentru a
fie efectuata dupa ce roll forward-ul este terminat pe backupul curent.
a bazei de date, se
Recuperarea bazei de date presupune ca intregul set de date fiind restaurat (setul roll forward)
mde se selecteaza consistent cu baza de date. in cazul In care setul de roll forward-uri nu a fost rulat inainte pentru ca s~
disponibile pentru destul de consistent cu baza de date ~i optiunea RECOVERY e specificata, motorul bazei de c
e. Pentru a inlocui returneaza o eroare.
~tele selectate din Pentru realizarea cu succes a comenzilor mentionate mai sus, instructiunea RESTORE DATABA
)are sunt automat este definita cu optiunea NORECOVERY. Trebuie mentionat ca backupul jurnalului de tranzactii trebui
suporte recuperarea cu optiunea NORECOVERY [42].
tonul Browse. in
nt Backup Media
in instructiune de mai jos, se executa restabilirea unui singur fi~ier Universitatea_File4 din gru
de fi~iere userdatafgroupOl. Fi~ierul restabilit este mutat intr-un directoriu deosebit de eel implicit pe
necesar, apasand
baza de date universitatea.
USE master
GO
iza instructiunea RESTORE FILELISTONLY FROM device02;
RESTORE DATABASE universitatea
FILE = 'Universitatea_File4',
FILEGROUP='userdatafgroup01'
.spozitivul logic FROM device02
WITH MOVE 'Universitatea File4' TO 'D:\DATA\Universitatea_File4.ndf';
GO
Instructiunea RESTORE FILELISTONLY determina numarul ~i denumirile fi~ierelor in backu
bazei de date ce permite realizarea acestei operatii de restaurare.
4. Care sunt dispozitivele backup? Metodele de creare a dispozitivelor backup in SQL Server.
Proprietatile dispozitivelor backup.
5. Cum se restaureaza un backup?
6. Care este structura instructiunilor SQL de creare ~i restaurare a backupurilor?
7. Utilitatea optiunilor RECOVERY ~i NORECOVERY
Sarcini practice:
1. Sa se creeze un dosar Backup_labll. Sa se execute un backup complet al bazei de date
universitatea in acest dosar. Fi~ierul copiei de rezerva sa se numeasca exercitiull.bak. Sa se
scrie instructiunea SQL respectiva.
2 Sa se scrie instructiunea unui backup diferentiat al bazei de date universitatea. Fi~ierul copiei
de rezerva sa se numeasca exercitiul2.bak.
3 Sa se scrie instructiunea unui backup al jurnalului de tranzactii al bazei de date universitatea.
Fi~ierul copiei de rezerva sa se numeasca exercitiul3.bak
4 Sa se execute restaurarea consecutiva a tuturor copiilor de rezerva create. Recuperarea trebuie
sa fie realizata intr-o baza de date noua universitatea_labll. Fi~ierele bazei de date noise afla
in dosarul BD_labll. Sa se scrie instructiunile SQL respective
Servicii de integrare a tlatelor
Server.
de date SQL Server Integration Services (SSIS) este o platforma pentru construirea solutiilor de integrare
ak. Sa se ~itransformare a datelor. Utilizarea serviciilor de integrare poate rezolva o serie de probleme complexe de
business prin automatizarea procesului de transfer al fluxurilor informationale intre diferite structuri de
ul copiei date SQL Server ~i sursele de date exteme. Serviciul SSIS a substituit Data Transformation Services
(DTS), care a aparut pentru prima data in SQL Server 7.0.
versitatea. lncepand cu versiunea SQL Server 2012, SSIS accepta doua modele de implementare (deployment):
modelul de implementare a proiectului ~i modelul de implementare a pachetului. Modelul de
implementare a proiectului permite des~urarea proiectelor pe un server Integration Services.
ea trebuie
noise afla in
cadrul acestui capitol, va fi analizat modelul de implementare a proiectului, fiind unul
recomandat de Microsoft din anul 2012.
Ad'lanced
~~1 l!J.iliU.5.Q.k2£r.t~tfilru~T.~n!lfiltl;;
Options ·"·¥.. Launch a downlcad page that provides a lui k to install SQL Serv~ M<!!n11genient
Stud1c, SCL Server command-line ublit16 (SQLCMD and BCP), SQl Ser:er PC\.,,erShell
provider, SC.l Server Profiler and Database Tuning Advisor. An internet connection is
requ1rl!d lo msli!lll thMe. teals.
;r'l'!!l!o_._...,.... l'ljt'l"°att provides slink to insta ll SQL Sl!l'>fer Oats 1 ool5 (SSDT).
SSOl provides Visual Studio inte91aticn including prcject system support for Arnre
SQL Database,. the SQl Server Database Engine.. Rep01ting Services, Anal;1sis Services
<lnd Integration Services. An mtemet ccnnecbon r ~ required to 1mtall SSDT.
3. La urmatorul pas, se defme~te aliasul pentru instanta noua Visual Studio ~i se aleg/se bifeaza
tipurile de proiecte disponibile dezvoltatorului din interfata SSDT. in cazul nostru, se lasa toate
instrumentele (data tools) afi~ate bifate ~i se apasa butonul Install.
r
1
l:
it
la
:aza
esar 4. Dupa ce se apasa butonul Install din pasul anterior, se deschide fereastra care vizualizeaza
LSaU
progresul de instalare. Se observa 2 bare de progres, Download Progress ~i Installation
Progress. Prima hara indica progresul de descarcare a binarelor de instalare de pe siteul
Microsoft, a doua hara - progresul de instalare propriu-zisa. Utilizatorul poate opri procesul de
instalare apasand butonul Cancel.
5. Dupa ce instalare este fmalizata cu succes, asistentul de instalare poate sa ceara un restart al
sistemului de operare.
New Project
I> Recent ' .NET Framework4.6.1 P·
,; Installed Type: Business Intelligence
Analysis )ervices Multidi mension al and... Business Intell igence
~ Visual(# Th is projHt may be used fo r building high
I· Virnal Basic Business Intell igence performance data integration and
workflow rnlutions, incl uding extraction,
SQL Server tran<formation, and loading (ETL)
,; Business Intelligence
Anal1sis SerJices
~ Report Serm Project W!Zard operations for data c~ ar ehc u sing.
!> Online
OK Cancel
3. in acest punct, se va deschide fereastra SSIS Designer, care reprezinta mediul constructorului
de pachete al Serviciilor de Integrare.
in partea de sus a paginii, se gasesc o hara de meniuri ~i o hara instrumente. Mai jos, in partea
stanga, se afla un camp de ohiecte SSIS Toolbox, care contine ohiectele corespunzatoare
sarcinilor ce trehuie executate de un pachet de integrare.
in partea dreapta, se afla fila Package.dtsx [Design], care reprezinta campul principal de
lucru. Fila Package.dtsx [Design], la randul sau, contine cinci file:
• Control Flow
Se utilizeaza pentru construirea, ordonarea ~i setarea sarcinilor (inclusiv sarcinii fluxului
de date) care asigura functionalitatea pachetelor, containerelor ce defmesc structura
pachetelor ~i constrangerilor de precedenta ce conecteaza containerele ~i sarcinile intr-un
flux de control. Meniul de context disponihil pe suprafata Control Flow perrnite
adaugarea notatiilor textuale, setarea punctelor de depanare, marirea ~i miqorarea
schemei pachetului. Meniul de context disponihil pe sarcinile individuale perrnite
executarea separata a sarcinilor, tara sa fie rulat intregul pachet.
• Data Flow
Se utilizeaza pentru lmhinarea intr-un flux de date a surselor care extrag date, a
transforrnarilor care modifica ~i agreeaza datele, a destinatiilor care incarca datele,
precum ~i a cailor care se conecteaza la intrarile ~i ie~irile componentelor fluxului de
date. Meniul de context al mediului de proiectare Data Flow permite, de asemenea,
adaugarea adnotarilor textuale. Meniul de context disponihil pe caile de conexiunile
componentelor fluxului de date admite configurarea Data Viewers pentru vizualizarea
datelor care tree prin fluxul de date.
• Parameters
Parametrii Serviciilor de integrare (SSIS) permit atribuirea valorii proprietatilor In
pachete In momentul executarii pachetelor. Fila Parameters se utilizeaza pentru crearea
~i gestiunea parametrilor la nivelul proiectelor sau la nivelul pachetelor.
• Event Handlers
Se utilizeaza pentru setarea fluxurilor de operatii care vor fi executate ca un raspuns la
evenimentul pachetului. De exemplu, poate fi elahorat un program de tratare a
evenimentelor care ar expedia un mesaj pe po~ta, in cazul e~ecului unei sarcini.
Servicii de integrare a date/or
• Package Explorer
Se utilizeaza pentru a obtine o vizualizare ierarhica a tuturor elementelor dintr-un pachet,
cum ar fi: configuratiile, conexiunile, procesoarele de evenimente, obiectele executabile
precum sunt sarcinile ~i containerele, furnizorii de jurnale, constrangerile de precedenta
l high
~i variabilele. Daca un pachet contine o sarcina de fluxuri de date, tab-ul Package
ion~ Explorer include un nod care contine o viziune ierarhica a componentelor fluxului de
date.
in partea dreapta de sus a constructorului, se afla fereastra Solution Explorer care ofera o
viziune ierarhica a proiectelor ~i componentelor acestora, precum ~i accesul la comenzile ce
pot fi aplicate, 0 hara de instrumente asociata cu aceasta fereastra prezinta comenzile
frecvent folosite pentru obiectele selectate din arbore.
in partea dreapta, mai jos de fereastra Solution Explorer, se afla pagina Properties care
permite vizualizarea sau modificarea proprietatilor asociate proiectelor create, fie 1n fereastra
Properties, fie In caseta de dialog Project Property Pages.
4. Orice proces de import-export de date are una sau mai multe surse de date ~i
destinatii. De la bun mceput trebuie sa fie definita sursa de date utilizate pentru
procesare, aceasta mseamna ca este nevoie de crearea unui nou Connection Manager
eel 1n proiectul SSIS 1n cauza.
in arborele de obiecte, In Solution Explorer, se face un click-drept pe Connection Managers
~i se alege optiunea New Connection Manager. in consecinµ, apare fereastra Add SSIS
Cl -
rului Connection Manager cu o lista de tipuri de conexiuni suportate.
mlui FTP Connection manager for FTP connections C:\Pro ... 14.0
;tura J Hadoop Connection manager for Hadoop Micros ... 14.l
tr-un I HTIP Connection manager for HTIP connections C:\ Pro ... 14.0
I MSMQ Connection manager for the Message Queue t... Micros ... 14.1
mite
rarea MSOLAP100 Connection manager for Analysis Services con ... C:\Pro ... 14.D
MUL TIFILE Connection manager for multiple files C:\Pro ... 14.0
mite 1
MUL TIFL.ATFILE Connection manager for multiple flat files C:\ Pro ... 14.0
ODATA Connection Managerfor OData ~.ervices Micros ... 14. 1
te, a
I ODBC
.. Connection manager for ODBC connections
;;.. ,.) if
'1.k ''fl
C:\Pro ...
"'
14.0
itele, 5MOSer1er Connection manager for SQL Server transfer ta ... Micros ... 14.1
1i de I SMTP Connection manager for the Send Mail task Micros ... 14.1
en ea, SQLMOBILE Connection manager for SQL Server Compact ... C:\ Pro ... 14.0
unile 1
NM I Connection manager for the \IVMI ta sks Micros ... 14.1
..,,
zarea
< >
Connection Manager al
Provider. INat iv• OLE DB\SQL Seiver Native Cl ient 11 .0 iJ
Q ' Server name:
-'·~·
~---·"'
Conn ection
Ml/
Connect to a database
in ~a fel, Connection Manager, odata creat la nivel de Solutie, va fi vizibil pentru toate
pachetele create in Solutia data. Adicii, pentru a accesa baza de date universitatea, nu va fi
nevoie de a defini o noua conexiune de fiecare data.
Servicii de integrare " dlltelor
Pentru a forma conexiune ~i la baza de date destinatie, procedura descrisa in punctul 4-6 se
repeta ~i pentru baza de date transf
8. Deoarece este nevoie sa se exporte date, adica sa se creeze ni~te fluxuri de date, se activeaza
fila Control Flow, in SSIS Toolbox se face un click pe Data Flow Task, apoi acest obiect
este glisat in aria de lucru.
Acum, in fluxul de date creat, trebuie sa fie definite intra.rile ~i ie~irile. Pentru a intra in
corpul tluxului de date, la urmatorul pas, se face un click pe fila Data Flow. Apoi se
marcheaza obiectul OLE DB Sourse, care se gase~te pe hara de instrumente in grupul
OtherSources. Acest obiect este glisat in aria de lucru, precum e aratat in urmatoarea figura:
•Common
Data Flow Task: ili Dat a Flow Ta=
.; Other Source;;
-~ ADO NH Source
i'.+ OLE DB Source 0
:mi: CDC S::iun:e
I:!+ Excel Source
:e dore~te
tentificare
e. Flat Fi le Source
!ge ultima
ra fi~ierul
azul cand
9. Se aplica un click-drept pe obiectul nou in aria de lucru, in meniul de context, se alege Edit.
in consecinta, pe ecranul calculatorului, va aparea fereastra OLE DB Source Editor.
10. Pagina Connection Manager a ferestrei de dialog OLE DB Source Editor se utilizeaza
pentru setarea conexiunii OLE DB la sursa de date. Tot in aceasta fereastra este posibila
selectarea tabelelor sau viziunilor din baza de date.
• In cfunpul OLE DB connection manager, dintr-o lista se selecteaza un Connection
Manager existent sau se creeaza o conexiune noua, apasand butonul New
• in campul Data access mode se specifica metoda de selectare a datelor din sursa.
• Cu ajutorul butonului Preview pot fi vizualizate rezultatele. Pot fi vizualizate pana la
200 de inregistrari.
tru toate
nu va fl
Servicii de integrare a date/or
Configure the properties used by a data flow to obtain data from any OLE DB provider.
Connection Manager Specify an OLE DB connection manager, a data source, or a data source view, and 'elect the data access mode. If
using the SQL command acce» mode, specify the 5QL command either by typing the query or by using Query
Columns Builder.
Error Output
tJ.ew ...
Table or view
Cancel !::!elp
Package.dtsx [Design]
{:>E Aggregate
Data Flow Task: i~i Data Flow Task
I-£! Ba la need Data Distribut ..
rf,
""' Condit ion al Spiit
~a Data Conversio n
1~ Data Streaming Destina ...
Iii+ Flaw_universitatea
13. in continuare, se creeazii o conexiune nouii. Pentru aceasta, obiectul OLE DB Destination
care se aflii in grupul de obiecte Other Destinations, se gliseaza spre aria de lucru. Se
specificii numele preconizat pentru obiectul nou, adicii Flow_ transf
mode. If
Query ..i Other Destinations
115+- ADO h ET Destinati::in
"7' Data Mining Model Training
i .;.. FIGw_universit:atea
14. Se selecteazii obiectul Flow_ universitatea ~i se gliseaza sageata albastrii spre Flow_ trans/,
dupa cum se vede in fereastra de mai jos.
!::!elp
Package.dts.x [Design]* -\:I X
., Favorites ~"° Control Flow
., Common
1nager ~i in Data Flow Task: i ...i Data Flow Task
•ersitatea ~i
., Other Transforms
: selecteaza
~ Cther Sources i+ Flow_universitatea
l
..ii Other Destination s
II;+- ADO NH Destination
15. Apoi in filii Data Flow se face click-drept pe obiectul Flow_transf, · in meniul de context_se
alege Edit. Astfel, se va deschide fereastra SQL Destination Editor.
Servicii de integrare a date/or
Configure the propertie;; used to bulk copy data into a local instance of the Database Engine.
Connection manager:
I MV transf New...
New ...
OK Cancel Help
16. in fereastra aparuta, in primul rand, in casuta de editare Connection manager, se seteaz4
conexiunea-destinatie din lista derulanta. in cazul nostru, aceasta va fi conexiune de date
trans/ Apoi, se apasa butonul New ... din dreapta cfunpului de editare Name of table or the
view.
Mai intfil de toate, in cutia de editare aparuta (Create Table), trebuie specificat numele
tabelului-destinatie. Se va tipari numele - discipline_transf Sistemul aduce automat toate
campurile tabelului-sursa. Unele dintre cfunpuri, daca e necesar, pot fi excluse. E destul,
pentru aceasta, sa fie eliminate din structura afi~ata. Apoi, se face un click pe butonul OK.
OK Cancel
Servicii de integrare a date/or
Daca pachetul a fost rulat cu succes langa fiecare Task in fila Control Flow ~i Data Flow va aparea
o bifa verde. ~i jos, in fereastra Output, va aparea un mesaj despre executarea cu succes.
i+ F10·1n_unive:rsitatea
21
Ii+- Aow_transf
in cazul nostru, se poate verifica daca tabelul discipline_transf a fost creat cu succes. Pentru
aceasta, in SQL Server Management Studio , ill fereastra Object explorer, se extinde baza de date trans/ ~i
se face un click pe Tables. Aici, trebuie sa se vada tabelul nou-creat - discipline_transf Daca se dore~te,
pentru a vizualiza datele transportate, se poate deschide tabelul discipline_transf
in caz de e~ec langa Task-ul afectat, In fila Control Flow, apare o bifa ro~ie. Pentru a izola
problema se trece la fila Data Flow, unde se vede care din p~i din Task-ul respectiv a e~uat. Din
imaginea de mai jos, fila Data Flow ne sugereaza ca a cazut procesul de export al datelor in baza de date
trans/ Urmatorul pas presupune analiza in detalii a mesajelor parvenite din task-ul e~uat - Flow_transf
Servicii de integrare a date/or
fiiil-+iil Data Flow riiiil Parar ' control Flow 1"'4 rmiii Q p,
Iii+-
l
Fl ow_transf
0
~'° Control Flow liil-+liil Data Flow ..... Parameters EJ Event Handlers ':~ Package Explorer ~
----·----- -------------------
1::• -+ Package
"P Validation has started
P Validation 1s completed
0 Start, 1:24:43 PM
i3 -+ Task Data Flow Task
0 Start, 1:24:43 PM
"'P Validation has started
[SSI S. Pipeline] Information: Validation phase is beginning.
-+ Progress: Validating - Opercent complete
CJ [Flow_transf [2]] Error: SSIS Error Code DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER. The Acquir
~ rssrS.Pioelinel Error: Flow transffailed validation and rewrned error code OxC0 2080lC.
in consecinta, se deschide prima fereastra Welcome to SQL Server Import and Export Wizard
a asistentului de copiere ~i transformare a datelor. Se apasa butonul Next.
3. La urmatorul pas apare fereastra Choose a Data Source, unde se specifica sursa de date care
trebuie copiata.
Q.ata source:
Acquir
:es ult: 4. in meniul derulant al campului Data Source, se alege furnizorul de date care se potrive~te
.led.". fonnatului de stocare a datelor la sursa. Poate fi mai mult decat un singur furnizor disponibil
pentru datele-sursa.
lizand
in cazul nostru, se alege - SQL Server Native Client 11.0. in campul Server name, se
ri: selecteaza serverul care contine baza de date (tabelul), din care se vor exporta datele. Apoi, se
selecteaza tipul de autentificare, activand unul din radiobutoane. Daca se alege tipul de
.te; autentificare SQL Server Authentication, trebuie sa se completeze cfunpurile User Name ~i
Password.
in campul Databases se alege baza de date care contine tabelul ce trebuie exportat. in cazul
nostru, va fi selectata baza de date universitatea. Se face un click pe butonul Next.
5. in fereastra aparuta Choose a Destination, se selecteaza destinatia exportului. in meniul
derulant al campului Destination, se selecteaza furnizorul de date care se potrive~te formatului
ingura
de stocare a datelor la destinatie.
in cazul nostru, se alege optiunea Microsoft Excel. Sa se observe ca fereastra este modificata
tip de in mod automat, ca in figura ce urmeaza: ·
ick cu
<:xport
Servicii de integrare a date/or
Choose a Destination
Spe>::ify where to copy d3ta to.
6. in aceasta fereastrii modificatii, in campul de editare Excel file path, se specificii calea ~i
numele fi~ierului care va piistra datele exportate. in cazul nostru, se selecteazii dosarul D:\temp
cu numele fi~ierului exportare_sql. in cfunpul de editare Excel version se alege versiunea
fi~ierului- destinatie (Excel) care va fi utilizatii. Apoi, se face un click pe butonul Next. Se va
Cl -
deschide urmiitoarea fereastrii:
7. in fereastra Specify Table Copy or Query, pentru a specifica modul de copiere a datelor, se
selecteaza una din cele doua radiobutoane. Pentru a selecta obiectele existente din baza de date
care trebuie copiate, poate fi utilizata o interfata grafica sau poate fi folosita o instructiune
Transact-SQL cu scopul de a crea o interogare mai complexa.
• Optiunea Copy data from one or more tables or views
Copie cfunpurile selectate din tabelele ~i viziunile-sursa in destinatia sau destinatiile
specificate, utilizand caseta de dialog Select Source Tables and Views. Aceasta optiune se
folose~te pentru copierea de la sursa a tuturor datelor, tara filtrare sau ordonare a
inregistrarilor.
• Optiunea Write a query to specify the data to transfer
Construie~te instructiuni SQL pentru cautarea inregistrarilor, utilizand caseta de dialog
Provide a Source Query. Aceasta optiune se folose~te pentru modificarea sau
restrictionarea sursei de date in timpul operatiilor de copiere. Sunt disponibile pentru
copiere numai liniile care se potrivesc criteriilor de selectie.
in cazul nostru, ramane marcata optiunea implicita, pentru transportarea tuturor inregistrarilor
tabelului. Apoi se aplica un click pe butonul Next, dupa care se deschide urmatoarea fereastra:
•.lea ~i
r Source : MV Destination : D:'-:temp \ exportare _sql .x!sx
Se va r _:i [dbol.{orarul]
.~ .: _j [dboJfprofesoril
r _j [dbo] [student1]
r _j [dbo] [studenti_reusita]
I- _j {dbo].{s>/sdiagramsl
r _j {schema_universitatea2j.{orarul_grupa]
r Cl fdbo].{exemplull ]
r Cl idbo J [exemplu14J
r Cl [dboJ.{exemplul5j
r 3._:i [dbo].[ore]
.t!elp
<flack 11 f'l_exb ' ---~ Cancel j
4-
8. In fereastra Select Source Tables and Views, se specifica tabelele ~i viziunile care vor fi
copiate de la sursa la destinatie.
• in coloana Surce, utilizand casutele din stanga, se selecteaza tabelele ~i viziunile destinate
copierii. Daca se selecteaza un tabel sau o viziune ~i nu se face nici o alta actiune, schema
~i datele din sursa vor fi copiate :f'ara modificari.
• in coloana Destination, pentru fiecare tabel-sursa se selecteaza din lista derulanta tabele-
destinatie disponibile. in cazul nostru, se marcheaza tabelul profesori.
Servicii de integrare a date/or
• Butonul Preview activeaza caseta de dialog Preview Data care ofera posibilitatea de
vizualizare a datelor inainte de a efectua operatiuni de import sau export. in caseta pot fi
afi~ate pana la 200 de randuri de date.
• Prin apasarea butonului Edit mappings se deschide caseta de dialog Column Mappings,
unde pot fi editate proprietatile coloanelor din tabel, care vor fi exportate.
Se apasa butonul Edit mappings. in consecinta, apare fereastra Column Mappings:
Column Mappings
Source: [dbo).[profesorij
Mappings:
OK Cancel
9. Apasand butonul Edit SQL... se deschide o cutie de editare, Create Table SQL Statement,
unde poate fi editata schema tabelului exportat, reprezentata in limbajul SQL.
in cazul nostru, se lasa totul fiira schimbari. Apoi se apasa OK ~i se revine la fereastra-mama.
in continuare, se aplica un click pe butonul Next. Ca urmare, asistentul va trece la urmatorul
pas.
10. La aceasta etapa apare fereastra Review Data Type Mapping care are functia de revizuire a
informatiei detaliate despre convertirea tipurilor de date care trebuie sa o realizeze asistentul
pentru a face ca sursa de date sa fie compatibila cu destinatia.
Aceasta pagina include un set de semne vizuale pentru a distinge conversiile care se succed
de conversiile care pot provoca erori sau trunchieri de date. Pentru fiecare conversie se poate
decide daca se accepta sau nu varianta de conversie sugerata de asistent ~i se poate specifica
modul de tratare a erorilor ce pot aparea.
in partea de sus a paginii Review Data Type Mapping se afla campul Table care contine lista
de tabele care servesc drept sursa de date pentru lista de tabele-destinatie respective din
partea dreapta.
in partea stanga langa fiecare tabel sursa se afla cate un indicator care indica probabilitatea
succesului in conversia tipului de date:
• 0 pictograma de culoare verde indica faptul ca asistentul ~teapta ca toate datele pentru
acest tabel sa fie convertite.
Servicii de integrare a datelor
Table:
Source Destination
1~~-~~~~~~~~~~~~~~~~J..,.._.
< >
Data type .mapping:
_j Source Column I Source Type J Destination Co .. I Destination Ty .. J Convert I On Error I On Trunca
J ld_profesor int ld_profesor Long
.nr ~~~~~-f.r.0.~~?i·.·
~ Prenume_Prof...
j varchar
varchar
Nume_Profesor
Prenume_Prof...
LongTex!
LongTex!
~
P'
Use Global
Use Global
Use Giob2
Use Globa
~ Adresa_Posta .. varchar Adresa_Posta ... Long Text l~ Use Global Use Glob.:
( >
To view conversion details , dou ble-click the rnw that contains the rolumn source type to be converted.
Selectiind un tabel sau altul, In gridul Data type mapping se afi~eaza o lista de coloane
destinate exportarii. in acest tabel sunt cateva atribute care necesita o atentie speciala:
• in coloana Convert se specifica daca conversia planificata ar trebui sa continue. Pentru ca
asistentul sa continue conversia, casuta trebuie bifata. Daca casuta se debifeaza, conversia
tipului de date se anuleaza.
• in coloana On Error se specifica modul in care asistentul va trata erorile aparute. Sunt
posibile trei variante de tratare a erorilor:
• utilizarea setarii Use global;
• e~uarea in caz de eroare ~i stoparea procesului de import/export;
• ignorarea erorii.
• in coloana On Truncation se specifica modul in care asistentul va executa trunchierea.
Sunt posibile trei variante de tratare a erorilor:
• utilizarea setarii Use global;
• e~uarea in caz de eroare ~i stoparea procesului de import /export;
• ignorarea erorii.
Pentru vizualizarea detaliilor conversiei ale fiecarui tip de date in parte, se face dublu click pe
inregistrarea respectiva a tabelului Data type mapping.
Servicii de integrare a date/or
in partea inferioara a ferestrei Review Data Type Mapping sunt amplasate instrumentele de
gestiune a erorilor. Sunt doua cazuri de erori: On Error (global) ~i On Truncation (global).
Pentru ambele cazuri, sunt posibile urmatoarele scenarii de comportament al sistemului:
e~uarea ~i oprirea procesului de export sau ignorarea erorii ~i continuarea procesului de export.
Aceste setari se aplica pentru toate conversiile care in tabelul Data type mapping au selectata
valoarea Use Global.
in cazul nostru, se lasa toate setarile neschimbate, fiind cele optimale pentru scenariul dat de
Cl -
export. Se apasa butonul Next.
W Rg_n i mmediately
11. La aceasta etapa apare fereastra Save and Run Package. Aici se poate decide daca exportul
trebuie sa fie executat imediat sau sa fie salvat ca un pachet SSIS ~i planificat pentru o data
ulterioara. Optiunea Save SSJS Package poate avea doua actiuni:
• SQL Server - salveaza pachetul intr-o baza de date msdb a sistemului Microsoft SQL
Server.
• File system - salveaza pachetul intr-un fi~ier cu extensia .dtsx.
in cazul in care se selecteaza optiunea Save SSJS Package, devine activ campul Package
protection level cu ajutorul caruia se define~te nivelul de protectie, fiind accesat in lista
derulanta.
Nivelul de protectie determina metoda de protectie, parola utilizatorului sau cheia acestuia,
precum ~i domeniul de aplicare a protectiei pachetului. Protectia datelor poate sa includa
toate datele sau numai datele sensibile.
in cazul nostru, ramane marcata optiunea de executare imediata ~i urmeaza un click pe
butonul Next.
12. Urmatoarea pagina se nume~te Complete the Wizard ~i prezinta un rezumat al operatiilor
realizate. Se actioneaza butonul Finish.
Servicii de integrare ll dlltelor
ntele de 13. in final, se afi~eazii pagina Performing Operation, unde este vizualizat procesul de
global). export/import ~i rezultatele acestui proces. Daca este necesar, procesul de import/export poate
emului: fi intrerupt, apasand butonul Stop. in gridul Details: sunt afi~ate actiunile care fac parte din
export. operatie, statutul lor ~i mesajele de informare sau de eroare.
electata Apasand butonul Report, raportul despre executarea operatiei import/export poate fi salvat
intr-un fi~ier sau expediat pee-mail.
l dat de Dacii totul este corect, in partea superioarii a paginii apare urmiitorul mesaj: The execution
was successful. Se apasii butonul Close.
11 Total 0 Error
Success 11 Success D \•·.laming
Q.etails:
_j Action~-·-·-·--~~~~--~~~~----··-St~at_u_s~~---------'_N_le_s_sa~g~e~----~--~
·:,,P Initializing Data Flow Task Success
~ Initializing Connections Success
·.:}) Setting SOL Command Success
~ Setting Source Connection Success
Setting Destination Connection Success
~ \ialidating Success
!::J Prepare for Execute Success
'..;§ Pre-execute Success
.fJ Executing Success
ii) Copying to 'profesorf Success J3 rows transferred
,';:I Post-execute Success
B.eport • I
exportul
u o data
Close I
d
oft SQL
in directoriul D:\temp\, va fi creat un fi~ier Excel, ~i acesta va avea aratea file, cate tabele au fost
exportate.
Package
in lista 12.5. Desfil!jurarea !ji gestiunea pachetelor SSIS
Pachetele SSIS create pot fi piistrate sub forma de fi~iere ~i apelate de ciitre SQL Server din sistemul
icestuia,
de operare sau pot fi integrate in corpul SQL Server ~i apelate din baza de date msdb. Un asemenea mod
includa
de utilizare a pachetelor de integrare se nume~te implementare de tip Pachet.
click pe incepand cu SQL Server 2012, Microsoft a introdus un format nou de desf'~urare ~i gestiune a
pachetelor de integrare, care se nume~te implementare de tip Proiect. Acest tip prezinta o serie de avantaje
de utilizare ~i o flexibilitate sporita de lucru in sisteme complexe de haze de date cu un numiir de instante
1eratiilor
SQL mare. In procesul de des~urare (deployment), proiectele SSIS noi sunt stocate in baza de date de
sistem numita SSISDB ~i, apoi, aflandu-se in aceastii bazii, ele pot fi accesate ~i gestionate cu instrumente
graficelntegration Services Catalog din mediul SQL Server Management Studio [19].
Servicii de integrare a date/or
Create Catalog
(_• Ready
To create and use the catalog , CLR integration must be enabled on the current SQL Seiver instance .
[?.] ~able CLR Integration
The catalog proted s data using encrJPtion . Ak~· is needed for this enciyption. Enter a password to prated
the encrfPtion key , and save the password in a secure location.
fassword :
Be!J'Pe Password:
You can manage the encryption key by creating a backup. Wyou migrate or move the Integration Services
catalog to another SQ L Server instance. you can restore the key to regain access to enc1ypted content.
[?.] Enable this server as SSIS scale out master
Connection
'If MV [MV\marian]
Ready
OK Cancel
In cfunpul Select the deployment model: se alege modelul de desf'~urare, se poate alege una
din douii opjiuni posibile - Project Deployment (valoarea implicitii) ~i Package Deployment.
servi
In sectiunea Select the Integration Service project that you want to deploy, se bifeazii sursa
de proiect, care urmeazii sii fie desfa~urat. Aici sunt douii radiobutoane disponibile: Project
~i se
deployment file (proiectul piistrat m sistemul de fi~iere) sau Integration Services catalog
(proiectul, care, deja, este des~urat pe un alt Server SQL mService Catalog). In cazul In
're ate care se bifeazii a doua optiune, utilizatorul va trebui sii specifice numele serverului-sursii,
t onul unde se aflii proiectul ~i calea ciitre proiect In Service Catalog.
In cazul nostru, liisiim toate optiunile implicite: modelul de desfa~urare de tip Proiect ~i sursa
de proiect implicit - Project deployment file. Campul Path, implicit, aratii calea ciitre
fi~ierele proiectului muz. Se apasii Next.
1ce .
Select Source
Integration Services Deployment Wizard -Ll -
lntmduc!ion ~Help
-dto protect Vahdate Select the Integration Services project that yuu want ta deploy.
Path :
m Services
I content . D:WS_201?\ Integration Servic es Project l \ lntegration Services Project· !irowse ...
Help
4. La pasul Select Destination, este nevoie sii fie specificat numele serverului-gazdii, unde va fi
:ISDB, iar plasat proiectul. In cfunpul Server Name, se specificii numele serverului SQL. In cfunpul
Authentijication, se alege tipul de autentificare Windows , SQL Server, Active Directory
Password Authentijication, Active Directory Integrated Authentijication . in cazul In care
se alege opjiunea 2 sau 3, va fi nevoie sii fie populate cfunpurile de mai jos - User Nam~ ~i
Password. Dupii ce optiunile dezirabile au fost definite, se apasii butonul Connect, care se
i aflii mpartea dreaptii.
atorii p~i: in cfunpul Path: activat, se specificii calea unde se va afla proiectul mcontainerul SSISDB.
.nterior. In cazul nostru, se apasii butonul Browse. in consecintii, apare fereastra Browse for Folder or
Project. Aici, mcazul nostru, se apasii butonul New folder ~i, m caseta de dialog, se scrie
Deploy. in
numele dosarului nou Univer_transf_export. Se apasii OK ~i apoi Next
.~urare -
Servicii de integr(lre " d(ltelor
Select Destination
Introduction ~Help
Select Source
&der-the destination server- name and where the project will be located in the
Integration Service$ catalog.
Server name:
Validate
MV B[Owse ...
P.ev1ew
.Authentication : 1Nindows .Authentication Connect
Resub
Path :
/ SS IS DB/ Univer_transl _export/Integration Services Proiect 1
<J:revious Cance[
L"J- uu1en cxµ 1ure1 ueta ll!:. - MIUU!:.011 ~l.!L ~erver M dm:iyem
File Edit View Debug Toots \l\~ ndow Help
I +::!!
LLl "'
Object Explorer
Connect y f >:¥ Ba ck i:,
Environments
1£ ~ SQL Server Agent
11 El XEvent Profiler
4. Apare fereastra Execute Package, care are 3 file. Editarea valorilor acestor file poate
schimba considerabil unele proprietati ale pachetelor.
Ja in
Fila Parameters listeaza parametrii asociati pachetului ~i este alcatuita din 2 coloane de baza
- Parameter ~i Value. Colana Value contine valorile implicite asociate parametrilor (daca
exista) ~i este editabila. Proiectul in cauza nu are niciun parametru ~i campul de lucru al
port, acestei file este gal.
Fila Connection Managers contine informatii despre conexiunile utilizate de pachet. Are 2
coloane: Name - nume de conexiune ~i Properties - proprietati, care, la randul sau, se
imparte in Property Name ~i Value . Cfunpul Value este editabil ~i permite utilizatorului sa
: modifice proprietatile conexiunilor dupa necesitate.
a:fla
rma,
alege
~~-----------------------~
Servicii de integr<1re " d<1telor
l 'tJ Ready
Select a page (T Script • !) Help
I /II General
Parameters Connection Managers !· Advanced
Name f:roperties
Comection
.•·ServerNam
UserName
e MV
NULL
, Yl MV jMV\marianJ
Ready
OK Cancel Help
in fila Advanced, se pot defini unele proprietati suplimentare, daca se dore~te o configuratie
deosebita de cea a Services Catalog-ului gazda, ca, de exemplu, Logging Level, Dump on
errors etc.
5. in cazul nostru, se lasa totul implicit ~i se apasa butonul OK.
6. in consecinta, apare mesajul informativ ca pachetul este pomit ~i pentru a urmari raportul de
executie, chiar acum, se poate apasa butonul Yes.
Pentru a vedea rezultatele executarii pachetelor sau urmarirea executarii pachetelor in timp real, in
Services Catalog erau create o serie de dashbord-uri ~i rapoarte navigand, prin care utilizatorul poate ~or
evalua situatia curenta ~i trecuta a serviciului SSIS in intregime ~i a fiecarui pachet aparte.
Pentru a obtine rapoartele de executare a pachetelor, in Object Explorer, se acceseaza Integration
Service Catalog, apoi, in functie de granularitatea dorita, se face un click-drept sau pe containerul
SSISDB, sau pe dosarele in cadrul SSISDB, sau chiar pe pachetele .dtsx. in meniul aparut se alege
Reports, apoi Standard Reports ~i in final All Executions.
Servicii de integrare a date/or
+ IVldfldyt:rtlt:fll
'?
,!,'. ..,.....
.......
Projects
, -. ..,..-..,...,..--,...,,
Start PowerShell
I
J1
2 .. Integration~ Execute in Scale Out...
- Package~
Reports Standard Reports • All Executions.
Pack. J
ffi Environments
+ 1~ SQL Server Agent
Rename
Delete
Cu~tom Reports ...
- -!
All Validations
J
:+ EJ XEvent Profiler
All Executions __j
Refresh
I
Raportul All Excutions va arata aproximativ ca in imaginea de mai jos:
All Executions - 2/ 28/ 201& 1:39AM - MV -P X All Connections -...8/20181:39 AM - MV All Validations - 2/2
All Executions
This report provides information about the Integration Services package ex.ecutions that have been performed on the connected
1i 1
Accesand link-urile din raport, utilizatorul poate naviga prin jurnalele de executie a catalogului ~i
schimba optica, de la o viziune generala, cum este prezentata la imaginea de mai sus, pana la detalii la
nivel pe fiecare pas executat de fiecare pachet.
in lumea reala, in mare parte, pachetele de integrare se executa in mod programat, dupa un anumit
orar fiind apelate fie din mediul SQL Server, fie din aplicatiile exteme.
Servicii de integrare a date/or
intrebiri de control:
1. Ce reprezinta SSIS? Care sunt componentele ~i functionalitatile acestui serviciu?
2. Particularitatile procesului de exportare a datelor, aplicand SSIS Package Designer.
3. Particularitatile procesului de exportare a date Ior cu ajutorul asistentului.
4. Gestiunea pachetelor SSJS de SGBD-ul SQL Server 2017
Sarcini practice:
1 Sa se exporte, utilizand SSIS, rezultatele rezolvarii a doua exercitii din capitolul 4 (instructiuni
SELECT), un export fiind realizat cu ajutorul asistentului de import/export, iar altul aplicand
SSIS Package Designer. Datele, in primul caz, trebuie sa fie exportate intr-o baza de date de
tip MS Access, iar in al doilea caz, trebuie sa fie exportate in tabelul transf.dbo.exercitiull.
2 Proiectul SSIS, creat in Package Designer (exercitiul #1), sa fie des~urat in Integration
Service Catalog ~i testat.
Servicii de creare a rapoartelor
Microsoft SQL Server 2017 Reporting Services (SSRS) ofera o gama completa de instrumente ~i
servicii pentru crearea, distribuirea ~i gestiunea rapoartelor despre datele extrase din baza de date ~i pune
la dispozitie o serie de facilitati ce permit ajustarea ~i extinderea functionalitatilor de generare a
rapoartelor pe cale programabila [4,5].
SSRS reprezinta o platforma de generare a rapoartelor bazata pe server, care ofera functionalitati
comprehensive de generare a rapoartelor pentru o varietate larga de surse de date. Serviciile includ un set
complet de instrumente pentru crearea, gestiunea ~i expedierea rapoartelor. Interfetele API permit
programatorilor sa integreze sau sa-~i extinda posibilitatile de procesare a datelor ~i rapoartelor 1n
aplicatiile utilizatorilor. Instrumentele acestor servicii functioneaza 1n mediile Microsoft Visual Studio ~i
SQL Server Report Builder ~i sunt complet integrate cu instrumentele ~i componentele sistemului MS
SQLServer.
Procesarea datelor este distribuita mtre mai multe componente. Procesoarele central ~i cele
specializate sunt folosite pentru cautarea datelor, procesarea aspectului raportului, procesarea formatelor
de prezentare ~i expedierea acestora la destinatie. Prelucrarea prezentarii este decuplata de procesarea
datelor ~i are loc dupa ce datele sunt gasite. Acest fapt permite mai multor utilizatori sa vizualizeze acel~i
raport simultan 1n formate proiectate pentru diverse dispozitive sau sa modifice print-un singur click
formatul de vizualizare a raportului, din HTML in PDF sau Microsoft Excel, sau XML.
Paginile rapoartelor pot fi create de un asistent sau 1n regim de constructor ~i pot fi plasate pe un
server WEB sau vizualizate 1n reteaua Intranet. in plus, acestea pot fi vizualizate 1n formatul asp cu
ajutorul unui navigator. Datele din rapoarte pot fi exportate din fonnatul asp 1n fi~iere cu alte extensii, de
exemplu .txt, .pdf.
~
.,,...,.._ New SOL Server stand-alone mstallatton er add. features. to an E(;stmg inrtallat:cn
<~ Launch a wiiard to in ~ta!I SQL Server 2017 in a non-clustered environment or t a add
~
feat ures to an existing SQL Server 2{)17 instance.
Tools-
Resources V ~
==' Install SQL Sel">ler Reporting SeMces
launch a download pi!ge that provides. a li nk tc imtall SQL Server Reporting Services.
An internet connection i ~ required to inst all S.SRS.
Advanced
f"hnf';.., .. ,. :. *
LJ ...: !mtaH SQL Server Management Tcols
Launch a download oaae that orovidos a link to install SOL Server Manaaement
Aici, in ciimpul Server Name, se specifica numele serverului SQL, unde urmeaza sa fie configurat
SSRS ~i se apasa butonul Find. Dupa ce serverul este giisit, in ciimpul de mai jos - Reporting Server
Instance - se specifica numele instantei serviciului de rapoarte. Numele implicit (default) pentru instanta
este SSRS. Se apasa butonul Connect pentru conectarea la Configuration Manager sau Cancel pentru a
anula conectarea [41).
Servicii de creare a rapoartelor
activeaza in consecinta, apare fereastra Reporting Services Configuration Manager, unde, pentru 0
ui SSRS. configuratie de baza a SSRS, este nevoie sa fie parcur~i 3 p~i principali:
e gratuita 1. Configurarea URL-ului serviciului de rapoarte.
valuation, in partea stanga a Reporting Services Configuration Manager, se face click pe optiunea Web
nul Enter
Service URL. in fereastra aparuta, se editeaza c8.nlpul Virtual Directory: din sectiunea Report
entificare
Server Web Service Virtual Directory. Aici, se scrie numele directoriului virtual utilizat pentru
serviciul de rapoarte. Apoi, se apasa butonul Apply de jos pentru a aplica configuratia, sau Exit
017, este pentru a anula schimbarile ~i a ie~i din Configuration Manager. Dupa activarea butonului
butonul I Apply, ill ciimpul de jos numit Results, apar mesajele de informare referitoare la des~urarea
pentru a modificarilor aplicate. in caz de succes, toate mesajele sunt illsotite cu bife verzi ~i ultirnul
mesaj este "The task completed succesefully". Dupa ce modificarile sunt aplicate cu succes, se
a instala trece la pasul urmator: #2.
za. Daca 2. Al doilea pas consta ill generarea a doua baze de date, necesare serviciului de rapoarte. Cu acest
scop, in partea stanga a Reporting Services Configuration Manager, se face click pe optiunea
de vor fi Database ~i se aplica un click pe butonul Change Database.
1 butonul in consecint3., apare asistentul de configurare a bazelor de date Report Server Database
Configuration Wizard ~i prima pagina a sa, numita Action. Aici, se lasa bifata actiune11 ce
onfigure urmeaza sa fie facuta - Create a new report server database, apoi se apasa butonul Next.
pentru a La al doilea pas al asistentului, numit Database Server, se cere specificarea numelui serveru\ui
SQL, unde vor fi create baze de date noi, tipul de autentificare ~i acreditarile utilizatorului, care
vor ft utilizate pentru crearea acestor baze. Pentru a testa acreditarile introduse, se apasa butonul
Test Connection, apoi Next.
:urare ~i
iului dP,
Report Server Database Configuration Wizard
)arte cu
'ervices Change Database
~ parte, Choose whether to create or configure a report server d'iltabase.
.!;cticn
pentru Choose a local or remote insta nce of a SQL Server Database Erigine and s pecify
tru a ii Database Server crede.ntials that have permiss ion to connect to that serv er.
!,J.sername:
Pass:ttord :
I est Connection
b_anc e l
La urmatorul pas, numit Database, se specifica numele bazei de date ~i limba implicita pentru
baza. Aici, se lasa numele implicit ReportServer ~i se apasa butonul Next.
La urmatorul pas ( Credencials), se seteaza tipul de autentificare ~i acreditarile pentru contul de
trat serviciu, care va accesa baza de date ReportServer. in cazul nostru, se lasa proprietatile
ver implicite ~i se apasa butonul Next.
1ta
1 a
Servicii de creare a rapoartelor
Fereastra Summary apare in cazul in care sistemul este pregatit de instalare. Utilizatorul este
informat despre optiunile selectate pentru a avea posibilitatea de a le veri:fica inca o data inainte
de a fi lansat procesul de instalare propriu-zis. Dupa apasarea butonului Next, procesul de
instalare este lansat.
Change Database
Choose whether lo creole or config<>re a report server database.
The follov.ing irrlorrr-ation ""ill be used to create a new report server database Verit; th is
information i.s correct before you continue.
SQ L Server Instance: MY
Report SeP1er Databcse: ReportServer
Summary Terrp Database: ReportSem,,TempDB
Repor1 Ser:<or Lang<>age: English (United States)
Report Server Mooe . Ma!i•1e
.i\uthentication Type: Se!vice Aocount
Usernafl'e· NT SERVICE\ SQLServerReportingServic .. .
Pass\~o.rd:
.Erevious Next
Pasul Progress and Finish informeaza daca procesul de generare a bazelor de date ~i
configurare a sistemului s-a incheiat cu succes ~i afi~eaza un grid cu informatii despre starea
fiecarui pas care a fost parcurs de instalator. Se apasa butonul Finish.
Change Database
Report Server Database Configuration Wizard
Ere•;1c.Js Einish
~i, prin urmare, in mediul Reporting Services Configuration Manager, apare informatie despre
baza de date creata, serverul ~i acreditarile acestora.
Servicii de creare a rapoartelor
The report serrer stores ail report server content ar.d apolication data rn a aa':aoase. Use tf'iis page to create or
ul este change the re~o"'!server database orupciate database corme:aion credentlah.
~. Service Account
nainte
sul de Current Report Server Database
' '
3. Ultimul pas consta in configurarea Web Portal URL, care va fi utilizat pentru vizualizarea ~i
gestiunea rapoartelor.
Cu acest acop, in partea stanga a Reporting Services Configuration Manager, se face click pe
optiune Web Portal URL. in fereastra aparuta, se editeaza campul Virtual Directory. i n cazul
nostru, directoriul virtual este numit Reports. Apoi, se apasa butonul Apply de jos sau Exit,
pentru a anula schimbari ~i a parasi configuratorul. Mai jos este prezent campul Result, deja,
cunoscut din pasul # 1. · Dupa ce modificarile sunt aplicate cu succes, se apasa Exit pentru a
parasi aplicatia de configurare.
starea • MV\;;SRS
Configure a VRl to access vVe b Portal. Cl'ick Advanced to define '11u1fo l.e URLs. or tc specify add it ional parameters on
the URL.
"'l, SerV1Ce Account
,_j Web Service URL f' The Web Portal virtual directorv name is not configured. To configure the directory, ente" a name or ~Be t tle def au:t •1a1ue tnat ls
provided, a'lG ther. d ick Apply.
:i,irtual Directory : ~
V Web Portal URL
!.[Rls: http :j/MV:BO/Reports
, E-mad Settings
Acum, In SQL Management Studio in lista bazelor de date, pot fi vazute 2 baze de date noi -
ReportServer ~i ReportServerTempDb. Aceste baze de date contin metadate despre rapoartele
des~urate in sistemul SSRS, istoricul utilizarii rapoartelor ~i alte informatii de serviciu
necesare pentru asigurarea functionarii SSRS.
New Project
r· Recent , .NET FramEWork 4.6.1 · ; Sort by: , Default P -
"" Instal led Type: Bu~iness Intelligence
Ana lysis Se.ivices Multidimens:io ... Business Intelligence
t Visual(# Create a new Repo1t Seri.·er project ming
I Visual Basic Business lnteJlige.nce Report Wizard.
SQL Ser/er
"" Busine5s: Intelligence
Analysis Services
Integration Se~ices Business. Intelli gence
Reporting 5Er•1ices
! Other Project Typeo ~ Ana lysis Services Tabu la r Project Business. Intelligence
r- Onlin e
4. Dupa aplicarea unui click pe butonul OK, va fi prezentata pe ecran fereastra Welcome to the
Report Wizard cu un mesaj de bun venit al asistentului in cauza. in aceasta fereastra, este
suficient sa se actioneze butonul Next.
5. Va fi deschisa fereastra Select the Data Source, in care va trebui sa se comunice sursa de date
pentru crearea raportului. Aici exista cateva optiuni:
• Shared data source. Se selecteaza pentru utilizarea unei surse predefinite de date partajate
care, deja, contine toate informatiile de conectare la sursa. Lista contine toate sursele de
date partajate care sunt incluse in proiect.
Iype:
Micrornft SQL Server
,\;;onnection .string:
Data Source= MV;lnitial Catal og = universitatea
• New data source. Se selecteaza pentru definirea unei surse noi de date. Informatia despre
sursa va fi utilizata doar cu raportul curent.
• Name. Se insereaza numele sursei de date. Numele trebuie sa fie unic in limitele
tn g
raportului.
• Type. Se alege tipul datelor, adica sistemul (ca in cazul nostru, Microsoft SQL Server)
sau limbajul (de exemplu, XML) In care aceste date au fost create.
• Connection string. Se selecteaza tipul secventei de conectare a datelor-sursa. Pentru
completarea proprietatilor optiunii Connection string, se apasa butonul Edit...
6. Apare, deja, fereastra cunoscutii Connection properties. Aici se specificii Server name ~i numele
bazei de date (in cazul nostru, se alege baza de date calculatoare). Apoi se apasa butonul Test
connection pentru a verifica corectitudinea setarilor de conexiune, apoi se apasa OK. in urma
setarii proprietatilor de conexiune, in cfunpul Connection string apare informatia despre sursa de
date.
Trebuie mentionat ca interfata ferestrei Connection properties depinde de tipul de conexiune
ales. Pentru a face sursa de date partajabila, se bifeaza radio-butonul Make this a shared data
source.
Pentru a continua, se apasa butonul Next.
ne to the
stra, este 7. La urmatorul pas al asistentului se deschide fereastra Design the Query. Se utilizeaza pentru a
crea o interogare sau in mod manual, sau cu ajutorul generatorului de interogari (Query Builder)
pentru a construi interactiv interogarea, sau prin importarea interogarii din alt raport.
a de date
Qu ery string:
SELECT d.Di sci plin a,
g.Cod_Grupa,
CONC AT(s. Nume_Student, ' ', s.Prenum e_Stuclent) AS Num e5tudent,
r.Tip_Evalu are,
r.Nota
FROM grupe g JOIN stu denti_reu sita r ON g.ld_Grupa = r.ld_Grupa
JOIN di scip lin e cl ON r.l d_Disciplina = d.ld_Disc iplina
JOIN studenti s ON r.ld_Stud ent = s. l d_Stuclen~
-·-----------
J::!elp < !l.ack tlext > Can cel
Sursa de date aleasa in pagina precedenta Select the Data Source a asistentului determina
interogarea care poate fi inserata in aceasta paginii.
De exemplu, In cazul In care sursa de date este de tip Microsoft SQL Server, exista posibilitatea
introducerii instructiunii Transact-SQL sau numele procedurii stocate. in cazul In care sursa de
date este de tip SQL Server Analysis Services, panoul de interogari este dezactivat ~i nu exista
posibilitatea introducerii directe a interogarii.
Aceasta fereastra are doua optiuni:
• in cfunpul de editare Query string, se scrie interogarea care cauta datele ce trebuie folosite in
raport.
Servicii de creare a rapoartelor
• Butonul Query Builder deschide un mediu de constructor grafic de interogari pentru sursa
de date sau ofera posibilitatea de importare a interogarii din alt raport. in cazul in care se
alege optiunea Query Builder... pentru a crea o interogare, apare fereastra Query Designer
care este similara cu View Designer din capitolul Administrarea viziunilor ~i a expresiilor-
tabel.
in cazul nostru, se alege optiunea Query string pentru a crea o interogare cu un cod mai
elegant ~i lizibil. Interogarea se scrie direct. Apoi, se apasa butonul Next.
8. In fereastra Select the Report Type apiirutii, se alege tipul raportului care trebuie creat. Se ofera
doua optiuni: tipul Tabular sau tipul Matrix.
Fie se selecteaza tipul Tabular ~i se apasa butonul Next.
P.age> Cod_Grupa
Qetail» Tip_Evaluare
I
........... !
Help < Ba ck Next> Finish » I Cancel
• Details. Afi~eaza lista campurilor care apar in sectiunea detaliilor tabelului. Pentru a
schimba ordinea campurilor, se selecteaza campul ~i se aplica un click pe butonul .!.... sau
butonul ..:J.
In boxa Details, se deplaseaza restul campurilor disponibile in sectiunea Available fields.
• Pentru a ~terge campul din listl se aplica un click pe butonul Remove.
Dupa efectuarea setlrilor respective, se apasa butonul Next.
10. In pagina Choose the Table Layout, sunt cateva optiuni:
• Stepped. Se creeaza un raport ce contine cate o coloana pentru fiecare camp, cu campurile
grupante amplasate in antetul grupurilor in partea stanga a coloanelor grupate, cu date
detaliate. Acest tip de tabel nu contine subsoluri grupate.
• Block. Se creeaza un raport ce contine cate o coloana pentru fiecare camp, cu campurile
grupante amplasate in primul rand detaliat al fieciirui grup. Acest tip de tabel are subsoluri
grupate numai in cazul in care este selectatl optiunea Include subtotals.
• Include subtotals. Se selecteaza aceasta optiune atunci cand se dore~te includerea in raport
a subtotalurilor pentru campurile numerice. Daca e selectatl optiunea Stepped, atunci
subtotalurile sunt plasate in randurile-antet ale grupurilor. Daca e selectatl optiunea Block,
atunci subtotalurile sunt plasate in randurile-subsol ale grupurilor.
• Enable drilldown. Se selecteaza aceastl optiune pentru a ascunde grupurile inteme ale
raportului, ~i activarea functiei de vizualizare, ce rezultl intr-un raport drilldown .
in cazul nostru, suplimentar se bifeaza butonul Enable drilldown ~i in rest, se lasa optiunile
implicite ~i se apasa butonul Next.
11. Fereastra Completing the Wizard se folose~te pentru atribuirea unui nume raportului ~i
revizuirea optiunilor aplicate acestuia.
• Numele raportului se specifica in campul Report name.
• Campul Report summary permite vizualizarea optiunilor ce au fost selectate la pasul
precedent al asistentului Report Wizard.
• Pentru modificarea unei optiuni, se aplica un click pe butonul Back pana la gasirea paginii
cu optiunea respectiva.
• Radio-butonul Preview report activeaza vizualizarea raportului imediat dupa creare.
In cazul nostru, in cfunpul Report name, raportul este numit Studenti Reusita ~i apoi se
bifeaza radio-butonul Preview report. Se apasa butonul Finish.
Studenti Reusita
CIB171
Disciplina Nu me Tip Evaluare Nata
Student
l±l Baze de
date
El Cercetari
operationa\e
El Brasovianu
Teodora
Examen 9
Reusita curenta
Testul 1 9
Testul 2 9
l±l Cosovanu
r,p;:min::i
2. Pentru editarea proprietatilor raportului deja creat, se activeaza fila Design. Trebuie mentionat
ca pentru proiectarea eficienta a rapoartelor poate fi utilizat ~i regimul design.
3. Dupa proiectarea ~i testarea raportului acesta poate fi publicat pe serverul de lucru, utilizand
instrumentele constructorului de rapoarte. In constructorul de rapoarte al mediului SQL Server
Data Tools termeniipublicare (publish) ~i desfa~urare (deploy) sunt interschimbabili.
£onfig uratio n:
' ~
Active(Deb ug)
v !'_latform: N! A v
?--
(Qnfiguration Manager...
I General E1TOrlevel
OutputPaih
2
.. " ti;n\Oebug
·~
Start Item
·~·
Overwrn:e Datasets
Ove;..;,,eDat~s.;un::eo
TargerDataset Folder Datasets
TargetDataSourceFolder Data Sour.:es
iWi~~,
. ~~~~~- ... Ae=ita
TargetReportPartFolder Report Parts
T•.f!iet.?erverURL. I-tip:/Jlocalhost/Repor!Serv.,.-
TargetServerVersion SQL Server- 20 16 or later
Taryet Repot!Folder-
. For a report server running in native mode. the path to the report folder, for example /Reports. Ft>r a report
server running in Share Point integrated mode. enter the URL of the SharePOll1t bbrar,• for reports , for exa ...
OK Cancel Apply
Servicii de creare a rapoartelor
3. Pentru a merge spre raport, se alege dosarul Reusita ~i apoi se alege raportul Studenti Reusita,·
~i apare raportul respectiv.
Word
Studenti Reusita
Cl8171 Excel
PowerP01nt
Disc1pli11a Nume Tip Evaluare Nata
Swdent PDF
ffl 8<1:" de dJ1 e
El Cetc<>tan TIFF hie
00Nat1onale
MHTM L [web archive)
El 8fa~Ovt3f)U
Teodor~
CSV (comma d ehrn1ted)
E)(ame11
Reusna
XM L file with report data csv
cutenta
l&stul 1 9
Data feed
T~!itui 2 9
Solution Explorer
F7
Shift+ Fl
Scope to Thi s
!]fl New Solution Explorer View
Exclude From Project
~ Cut Ctrl +X
rll rnnl t ,.- trl ... (
De exemplu, este nevoie de ajustarea latimilor campurilor Disciplina ~i Nume Student din raportul
Studenti Reusita pentru a oferi acestui raport un aspect mai compact ~i o viziune mai placuta.
Modificarea proprietatilor oricarui tabel din raport poate ti efectuata ill mai multe moduri. De
exemplu, ajustand pozitia liniilor ce formeaza laturile tabelului, ill mod manual, cu mause-ul sau editand
proprietatile coloanelor ce formeaza acest tabel ill fereastra Properties. Fereastra Properties, implicit, se
afla in partea dreapta de jos a mediului Visual Studio, iar daca lipse~te, poate fi chemata apasand tasta F4.
in cazul nostru, se procedeaza ill felul urmator:
I. in Report Designer, se face un click pe titlul coloanei care trebuie modificata.
2. in fereastra Properties, sectiunea Position, ill proprietatea Size se modifica valoarea latimii
campului.
Ort
mt
Servicii de creare a rapoartelor
Properties
'l~l )
[MunieSt udentl
( Position
[Tip Evaluarel fNota] ;,.. "I
3. Dupa modificarile aplicate, se activeaza fila Preview. Daca rezultatul este conform rujteptarilor,
modificarile sunt salvate in proiect ~i apoi des~urate pe serverul SSRS.
Regimul de constructor, bineinteles, ofera o flexibilitate cu mult mai mare in alegerea formelor de
publicare a datelor. In afara de o serie de instrumente grafice oferite de Visual Studio ~i Report Builder,
pentru a mari flexibilitatea rapoartelor, utilizatorul poate folosi expresii dezvoltate 'in limbajul Visual
Basic. De asemenea, intru-un proiect SSRS, pot fi u~or incluse ~i clase scrise in limbajele .NET. Acest fapt
face posibilitatile de design a interfetelor rapoartelor SSRS aproape nelimitate.
intrebiri de control:
1. Particularitatile procesului de creare ~i gestiune a rapoartelor cu ajutorul asistentului ~i In regim
de constructor.
2. Seta.rile serviciilor de rapoarte necesare pentru construirea ~i des~urarea rapoartelor.
Sarcini practice:
1. Sa se creeze un fi~ier HTML ~i, prin intermediul serviciului SSRS, sa se publice in acesta
rezultatul executarii procedurii stocate create in capitolul 9, sarcina practica 1.
2. in baza exercitiilor rezolvate in capitolul 4, sa se creeze 2 rapoarte. Primul - cu ajutorul
asistentului, al doilea - in regim de designer. Datele pentru primul raport sa se obtina in Query
Builder ~i sa fie vizualizat sub forma tabelara in formatul xlsx. Datele pentru al doilea raport sa
reprezinte rezultatul executarii interogarii scrise direct in Query string ~i sa fie vizualizat sub
forma matriceala intr-un fi~ier pdf
Servicii de analiztl dimensionaltl a date/or
in calitate de masuri, in cubul tridimensional din figura de ma1 JOS, sunt folosite volumele
vanzarilor, iar ca dimensiuni - timpul, produsul ~i magazinul. Dimensiunile sunt reprezentate pe anumite
nivele de grupare: produsele sunt grupate dupa categorii, magazinele - pe tari, iar datele despre timpul
efectuarii operatiei - pe luni. Mai jos, vor fi analizate mai detaliat nivelele de grupare (ierarhii).
I W su4=]1Canada II Mexica I
I Ianuarie 11 20 ooo 11 4000 11 2000 I
[" Februarie I 30 000 I 6000 11 3000 I
I Martie 11 50 ooo 11 10000 11 5000 I
in urmatoarea figura e prezentata doar o dimensiune ,,netaiata" - Store, insa, sunt valorile catorva
masuri- Unit Sales (bucati vandute), Store Sales (volumul vanzarilor) ~i Store Cost (cheltuielile)
I I Mexic I
~ Lgl.4_] ~anada
I Unit Sales II 2000 11 400 11 200 I
I Store Sales IUQ:QQQJ[_lQQQJI 3000 I
I Store Cost 10 000 II
JI2000 11 1000 I
Vizualizarea bidimensionala a cubului e posibila ~i atunci cand raman ,,netaiate" ~i mai mult de
doua dimensiuni. Astfel, pe axe le taieturii (randuri ~i coloane) pot fi amplasate doua sau mai multe
dimensiuni ale cubului ,,taiat", precum in urmatoarea figura:
instructiunilor de consultare. De asemenea, bazele de date OLAP pastreaza ~i date sub forma precalculata
fapt ce spore~te viteza de afi~are a datelor agregate [38].
Baze le de date OLAP, de regula, se construiesc avand ca sursa de date bazele de date relationale
OLTP. Datele din bazele de date OLTP prin metode ETL (Extract - Transform - Load) sunt transformate
in baze de date OLAP.
Se recomanda ca in procesul de importare a datelor din bazele de date relationale native (OL TP) in
bazele de date OLAP sa fie creata o baza de date analitica relationala (ROLAP) care, pe de o parte, sa
comunice cu OLTP ~i, pe de alta parte, cu baza de date OLAP. Baza de date ROLAP reprezinta o baza de
date relationala, alcatuita din datele dezagregate care sunt aranjate in tabele-masuri ~i tabele-dimensiuni.
Baza de date ROLAP ca ~i alte baze relationale este gestionata de Database Engine Service. Astfel,
procesul ETL se va petrece ca in urmatoarea figura:
OLTP ROLAP
OLAP
=O=S)
Reporting Server
0 astfel de arhitectura a procesului de analiza ~i calcul ofera o flexibilitate ~i independenta mai mare
fiecarui nivel de procesare. De asemenea, prelucrarea datelor in cadrul procesului ETL, pe fiecare nivel,
va decurge mai repede ~i cu costuri hardware mai mici.
lnstrumentele SQL Server Data Tools (SSDT) acceptii, in cadrul unui proiect Analysis Services,
douii metode de utilizare a schemelor relationale in definirea obiectelor OLAP.
in general, in cadrul unui proiect Analysis Services, obiectele OLAP se definesc pe baza unui model
a de date logic construit intr-o viziune a sursei de date, numita DSV, (Data Source View) a unui proiect.
Aceastii viziune a sursei de date este definita pe baza unor elemente ale schemei care provin din una sau
mai multe surse de date relationale.
Dar se poate lncepe, de asemenea, cu definirea obiectelor OLAP ~i, ulterior, sa se genereze o
viziune a sursei de date (DSV), o sursa de date, precum ~i schema bazei de date relationale (ROLAP) care
suportii aceste obiecte OLAP. Aceasta baza de date relationala se nume~te "zona care reprezinta subiectul
bazei de date".
Aceastii abordare este, uneori, numita metoda de proiectare top-down ~i este :frecvent folosita pentru
e
crearea prototipurilor ~i modelor de analiza. in continuare, va fi aplicata aceasta abordare.
NewProiect
t Rocent
~ Online
Not finding what you are looking for?
Open Visual Studto lmtaller
Name: Pnmul meu cub
],ocatton: .§.rcwse...
14.3. Crearea unui Cub folosind asistentul, dar fara sursa de date
Daca se decide construirea cubului :tara sursa de date de tip Warehouse, existii optiunea de utilizare
a ~abloanelor integrate care vor fl de ajutor la defmirea structurii cubului. Dupa selectarea ~ablonului
dezirabil, se selecteazii miisurile ~i dimensiunile din ~ablon pentru a le include in cub ~i se specifica
dimensiunile, care vor fl asociate cu miisuri. Existii optiunea de generare imediatii a schemei relationale
dupa terminarea lucrului cu asistentul. Totu~i, inainte de a face acest pas, se poate dori, mai intai,
modificarea sau suprimarea obiectelor create din ~ablon.
Urmeaza procedura de creare a unui cub nou cu ajutorul asistentului.
tru
rea
ui,
Servicii de analizii dimensionalii a date/or
Cube Wizard
ci M:w··
Define New Dimensions
Define new dimensions and set basic properties for them . You can edit the
dimensions later in Dimension Designer.
<.!2_ack L
!iext > Cancel
Cube Wizard o M4
Define New Dimensions
Define new dimensions and set basic properties for them. You can edit the
dimensions later in Dimension Designer.
-
'
--
<]iack Next ) Cancel
'- - - - '
Cube Wizard
. CJB 1
Specify Additional Calendars
Select any calendar structures that you 'Nan! to create in addition to the
standard 12-month calendar.
~ Reg_ular calendar
~ F[scal calendar
Start gay and month: March
Fiscal calendar naming g_onvention: Calendar year name + 1
0 Manufacturing calendar
I ti)
Define Dimension Usage
Cube Wizard
Product ~ ......................
Date ~
Cancel
Servicii de analiza dimensionalii a date/or
Casutele bifate indica faptul ca ambele dimensiuni Product ~i Date vor fi asociate automat cu
grupul de masuri Sales. Deoarece va fi construit un cub simplu, ambele dimensiuni vor fi
asociate cu o singura masura.
2. Se aplica un click pe butonul Next.
in urmatoarea fereastra Completing the Wizard, se ofera un nume cubului ~i constituie ultimul
pas executat de asistent.
Cube Wizard
Compfeting the Wizard
Name the cube. review its structure . and then click Finish to save the cube .
~ube name:
.Cubul de vinzari
£review :
_, ~ ~J\ttf1(!$5itj
13 9l] Measure 'groups
•+i [111] Sales
i;:;1 9l] Dimensions
·- • ~ Product
[tJ ill
Hierarchies
[±! ill Mributes
T !!! Date
<.6.ack Cancel
Cubului i se atribuie automat un nume, atunci ciind se folose~te un ~ablon. in acest caz, numele
implicit este Adventure Works. Daca in procesul de creare a cubului nu se utilizeaza un
~ablon, atunci numele implicit este New Cube. Numele cubului poate fi oriciind modificat in
procesul de lucru.
2. Structura cubului creat care este prezentata sub forma unui arbore ierarhic poate fi revazuta in
ciimpul de vizualizare Preview. Se expandeaza nodul Product ~i apoi se expandeaza dosarul
Attributes, pentru a vizualiza atributele care vor fi create in dimensiunea data.
Aceasta este prima vizualizare comprehensiva a structurii cubului. Pentru efectuarea
modificarilor in structura cubului, este posibila revenirea la pagina respectiva a asistentului
Cube Wizard. Cu toate acestea, modificarea structurii cubului poate fi realizata ~i ulterior, daca
se dore~te adaugarea sau suprimarea obiectelor.
Daca se bifeaza radiobutonul de jos Generate Schema Now, se va lansa asistentul Schema
Generation Wizard. Schema este o baza de date relationala denormalizata ce contine tabele
pentru grupurile de masuri ~i dimensiuni utilizate in cub. Acest asistent va fi examinat mai
tiirziu.
3. Se actioneaza butonul Finish.
in rezultat, apare fila Cube Structure a instrumentului Cube Designer
Servicii de analizii dimensionalii a date/or
-~ x
::" KPls @~ Acti ... (II Par... {i'!. Agg ... Q) Per... *<) Tra... {';l Bro ...
Trebuie mentionat ca liniile ro~ii din panoul Measures indica faptul ca exista o problema in ceea ce
prive~temasurile afi~ate. Deoarece nu este nici o viziune sursa de date (DSV), apare o eroare conditionata.
Aceasta eroare va fi inlaturata mai tarziu la generarea schemei.
in coltul stanga-jos, se poate observa panoul Dimensions, care contine acele doua dimensiuni ale
cubului. in coltul stanga-sus, se poate observa panoul Measures, unde se poate vedea grupul de masuri cu
doua componente. Deoarece cubul nu este inca conectat la sursa de date, nu exista un DSV vizibil in
centrul ferestrei. Cu toate acestea, structura cubului poate fi revazuta ~i modificata pana aceasta devine
corecta. Asistentul Cube Wizard nu creeaza fi~ierele cubului ~i nu incarca valorile din magazia de date
(data warehouse).
x in fereastra Properties, se pot vizualiza toate proprietatile asociate grupului Sales de masuri.
La vizualizarea masurilor in forma de grid (Grid View), care reprezinta forma de vizualizare
implicita in Cube Structure, nu pot fi accesate proprietatile grupurilor de masuri. Totu~i, poate
fi utilizata bara de instrumente pentru a trece dintr-o forma de vizualizare in alta. Butonul de
trecere de la Grid View la Tree View ~i viceversa este m tJ .
4. Se aplica un click pe cubul Cubul de vinzari de pe panelul Measures.
P·
projec
Deoarece grupurile de masuri implica o serie de proprietati ale cubului, ultimele pot fi
modificate numai la utilizarea formei de vizualizare Tree View. Proprietatea DefaultMeasure
este asociatii cu cubul ~i poate fi necesarii modificarea ei, atunci cand cubul a fost construit in
baza unui ~ablon ~i se dore~te excluderea masurii implicite a ~ablonului din cub. in acest caz,
masura Reseller Sales Amount nu este una valida pentru cubul creat ~i, prin urmare, e
ube
necesara modificarea proprietatii.
5. In fereastra Properties, se gase~te proprietatea DefaultMeasure (in partea de sus a listei), ~i se
selecteaza Sales Dollars din lista derulanta a proprietatii.
Trebuie mentionat ca in cazul in care aceasta proprietate nu este resetata, cubul nu va putea fi
procesat cu succes.
6. Se expandeaza dimensiunea Date din panoul Dimensions.
Ecranul va arata, precum urmeaza:
ni ale D D ;;J
uri cu Solution 'P rimul meu cub ' (1 project)
ibil In ,. aj1'. Primul meu cub
iii Data Sources
levine ill Data Source Views
e date ,. ill Cubes
IS) Cubul de vinzari.cube
,. iii Dimensions
t~ Cubul de vmz~;i
rnasuri i t! Product
~Date Click here to generate data source
iecarui Cubul de vinzari Cube
,!_ E!!•: D~!J;: view
tare in :Jo, Year - Quarter · Month - Date ~'iJ.
::•. Fiscal Year - Fiscal Quarter - Fiscal Month - Fiscal Dav
emata ill Attributes El Advanced
AggregationPrefi.....------
DefaultMeasure Sales Dollars
elor de ErrorCo nfiguratiorr-,~~1---
ociate. EstimatedRows 0
Source Lanouaoe
i se va
in panoul Dimensions sunt prezente cele doua ierarhii construite de asistentul Cube Wizard:
• Year-Quarter-Month-Date
er. Ea • Fiscal Year - Fiscal Quarter - Fiscal Month - Fiscal Day
Sales Linkul Edit Date din capul listei de ierarhii pennite deschiderea filei Dimension Structure
pentru dimensiunea Date. Dimension Structure este un spatiu de lucru in componenta
Dimension Designer, in care pot fi redactate proprietatile atributelor ~i ierarhiile intr-o
dimensiune data.
e.
7. Se expandeazii dimensiuneaProduct din panelul Dimensions ~i se extinde dosarulAttributes.
Servicii de analizil dimensionalil a date/or
Dimensions
j E) Cubul de vinzari
j '"' t@: Product
~ ~ Eciit Preiduct
::~ Product Model Categories
::~ Product Categories
::~ Product Model Lines
::~ Stock Level
"- ill Attributes
55 Category
EE dass
55 Color
55 Days to Manufacture
55 Dealer Price
55 End Date
55 Large Photo
55 List Price
55 Model Name
~5 Product
55 Product Key
55 Product Line
:: RPnrriPr Pnint
in consecinta, in panelul Dimensions sunt afi~ate toate atributele ~ablonului Adventure Works
Standard Edition folosit pentru crearea cubului. Daca nu se dore~te includerea unora din aceste
atribute in dimensiunea curenta, ele pot fi suprimate pe loc. Atributele unei dimensiuni pot ft
modificate sau suprimate ~i in Dimension Designer.
6. Apare pagina Specify Target a asistentului. in aceasta pagina se specifica viziunea sursei de
date ill care asistentul va forma schema bazei de date a domeniului de interes. De~i exista
posibilitatea de selectare a unei viziuni a sursei de date existente, de obicei, se recomanda
crearea unei viziuni noi bazate pe o sursa de date. Poate fi creata sursa de date in baza unei
conexiuni existente sau a unei conexiuni noi, sau ill baza unui alt obiect.
Asistentul Schema Generation genereaza schema pentru baza de date din domeniul de interes
illtr-o baza de date, la care se refera sursa de date, precum ~i a viziunii sursei de date. Schema
Generation Wizard nu creeaza ills~i baza de date a domeniului; in schimb, asistentul creeaza
schema relationala pentru a sustine cuburile ~i dimensiunile intr-o baza de date existenta
specificata.
Daca sursa de date a fost adaugata anterior la proiect, ea poate fi selectata din campul derulant
Data Source. in cazul nostru, pentru a adauga sursa de date, langa campul de editare Data
Source se apasa butonul New.
in rezultat, se deschide pagina de bun venit (Welcome to the Data Source Wizard) a
asistentului Data Source Wizard. Aici se aplica un click pe butonul Next.
6. in consecinta, apare pagina Select how to define the connection a asistentului. in aceasta
pagina trebuie sa fie bifata casuta Create a data source based on an existing or new
connection ~i se apasa butonul New.
Property Value
Data Source MV
Initial Catalog primul_Ol.V
Integrated Sec ... SSPI
Provider SQLNCLl11 .1
Delete
<ftack Cancel
7. Apare caseta de dialog Connection Manager cunoscuta, deja, din capitolele precedente.
8. Se selecteaza baza de date primul_DW din meniul derulant Select Or Enter A Database
Name, se testeaza conexiunea ~i se apasa butonul OK. Apoi ill pagina deschisa a asistentului,
se apasa Next.
9. Pe pagina Impersonation Information se definesc parametrii de autentificare ce vor fi utilizati
pentru conectarea Analysis Services la sursa de date.
Servicii de analizii dimensionalii a date/or
Impersonation Information
You can define what 'Windows credentials .Analysis Services will use to connect to the data
source.
f'.assword:
!nherit
<!l_ack Cancel
Din patru variante posibile de autentificare, in cazul nostru, se bifeaza Use a specific Windows
user name and password. in campurile respective se specificii numele utilizatorului ~i parola
pentru un login care va fi capabil sii acceseze baza de date primul_DW din Analysis Services.
Apoi se aplicii un click pe Next.
Urmiitoarea paginii - Completing the Wizard, se utilizeaza pentru vizionarea proprietiitilor de
conexiune la sursa de date ~i specificarea numelui noii surse de date. Valoarea implicita a
campului Data Source Name este numele bazei de date selectate, primul_DW. Proprietatile
conexiunii sunt afi~ate pe panelul Preview.
£'.review:
Connection string:
< !l.ack
10. Pentru a termina lucrul cu asistentul Data Source Wizard se apasii butonul Finish.
Ecranul va ariita, precum urmeazii:
Servicii de analizii dimensionald a date/or
Specify Tor-get
Specify the data source view in which to generate the schema.
Anew data source view will be created for the data source you specify.
lndows
parol~ Acum, cand sursa de date este accesibila, poate fl continuat procesul de generare a schemei
?rvices. cu asistentul Schema Generation Wizard. Sistemul revine la pagina Specify Target.
11. Se apasa butonul Next.
:ilor de Urmatoarea pagina Subject Area Database Schema Options se utilizeaza pentru controlul
licita a modului de generare a schemei, precum ~i pentru specificarea modului de pastrare a datelor.
'ietatile
Schema Generation Wizard
Subject Area Database Schema Options
Specify the schema generation options for the subject area database .
~J Create [ndexes
<.!lack Cancel
• Campul Owning schema specifica numele schemei in cadrul domeniului nou in baza de
date.
• Daca este bifata optiunea Create primary keys on dimension tables, sistemul creeaza
cheile primare pe tabele-dimensiuni in schema generata. Nici un index nu este generat,
daca nu este selectata aceasta optiune.
Servicii de analizii dimensionald a date/or
Specify the naming conventions you want to use in the new schema.
Cl -
Option Value
Separator Underscore
Primar; key column prefix PK
Foreign key column prefix FK
.Attribute name suffix Name
Custom rollup suffix Custom Rollup
Custom rollup properties suffix Custom Rollup Properties
Unar; operator suffix UnaryOperator
Skipped levels suffix Skipped Levels
Value column suffix Value
sunt
mm!(. Dim ... iffe! Cal ... ==- KP!s lil'!l Act... GI Par ... ti)!: Ag... 6J Per ... ;{i:J Tra .. . ~ Bro ...
P·
Measures Data Source view :;;J Solution 'Primul meu cub ' (1 projec •
Cubul de vinzari
"' ,;iT. Primul meu cub
(111] Sales
Im .. _, ~ ill Data Sourc°'
Im Sales
111 Sales Do.1ars
.o PK_Date ii Primul DW.ds
FK_Product
111 Sales Units FK_Date
Date_Name "' ill Data Source Views
Year o"ll Primul meu cub.dsv
Sales_Dollars Year_Name
Sales_Units Quarter
,,, ill Cubes
Day _Of_Quarter
ill Mining Structures
Day_Of_Quarter _Name
Standard_Cost
le Categorv
Day_Of_Month
Day_Of_Month_Name
Category _Name
Month_Of_Year
Color
Month_Of_Year _Name Primul meu cub DataSourceView
n Safety _Stod_Level
Reorder_Point
Month_Of_Quarter
.e Month_Of_Quarter _Name
DlmertSIOflS
Ust_Price
Quarter_Of_Year
Soze 8 Advanced
t9 Cubul de-~;i~zari S!Ze_Range
Quarter_Of_Year _Name
it- \! Product
a 1+ \!Date
'Neight
We1ght_Name .
u
.. ~:~~~~~~:.:.:. .d 8 Data
'}
14.5.2. incarcarea date/or in schema re/ationa/a
,
Acum cand tabelele-dimensiuni ~i tabelele-fapte sunt in baza de date creata - primul_DW, este
posibilii popularea lor cu date cu scopul de procesare a cubului. Procesarea cubului este o operatie de
incarcare a datelor in cub ~i in fi~ierele-dimensiuni din tabelele relationale. Metodologia de pregatire a
datelor pentru incarcarea in magazie iese din limitele acestei lucrari. Pentru a duce la bun sf'ar~it procedura
de incarcare, e necesara copierea unei submultimi de date din baza de date AdventureWorksDW2017 in
baza de date nou-creat!,primul_DW.
in lumea real!, pentru a transfera volume de date mari de la sursa la destinatie, daca acestea sunt
distribuite geografic, sau cand este nevoie de o transformare de date, este recomandata utilizarea SSIS sau
Servicii de analizii dimensionalli a date/or
a altor tehnici ~i procedee speciale. in cazul nostru, cand ~i sursa ~i destinatia se afla pe acee~i m~ina
fizica ~i datele sunt omogene, procedura de copiere a datelor din tabelele DimProduct ~i
FactResellerSales din baza de date AdventureWorksDW2017 in baza de date - primul_DW poate fi
scrisa in cateva instructiuni SQL.
Vor fi populate doar unele coloane din baza de date primul_DW, suficiente pentru a demonstra
utilitatea tehnologiei OLAP.
Coloanele tabelului-sursii DimProduct se mapeaza cu tabelul-dimensiune Product confonn schemei
maijos.
Sursa Destinatia
ProductKey PK Product
EnglishProductName Product Name
Weight Weight
Coloanele tabelului-sursa FactResellerSales se mapeaza cu tabelul-fapt Sales, conform schemei
maijos.
Sursa Destinatia
ProductKey FK Product
Ful IDateAltemateKey FK- Date
SalesAmount Sales Dollars
OrderQuantity Sales Units
Implicit daca se executa un pachet de instructiuni T-SQL ~i una din ele nu reu~e~te, inapoi este
rulata numai instructiunea care a dat eroare [ 11]. Cu scopul de a pastra integritatea datelor in
DataWarehouse-ul nostru, acest comportament poate fi modificat prin utilizarea expresiei SET
XACT_ABORT ON, care, in caz de eroare, va rula inapoi toate instructiunile din pachet [46]. Instructiunile
BEGIN ~i COMMIT TRANSACTION explicit indica sistemului inceputul ~i sf'ar~itul pachetului de
instructiuni grupate intr-o tranzactie. in ~a fel, instructiile INSERT de mai jos care insereaza datele in
tabelele mentionate, va reu~i numai daca fiecare instructiune din pachet va reu~i.
Se deschide Microsoft SQL Server Management Studio ~i, din Query Editor se executa
urmatoarea instructiune T-SQL:
USE primul_DW
GO
SET XACT ABORT ON;
GO
BEGIN TRANSACTION;
INSERT INTO Product(PK_Product,Product_Name,[Weight])
SELECT ProductKey, EnglishProductName, [Weight]
FROM AdventureWorksDW2017.dbo.DimProduct
ina in cazul procesarii unei dimensiuni, Analysis Services cite~te informatia din tabelele-dimensiuni ~i
~i construie~te o harta a dimensiunilor bazata pe fiecare atribut. in limitele h8.rj:ii, fiecare valoare din
fi coloanele tabelului-dimensiuni este un atribut-membru stocat intr-o ierarhie cu doua nivele pentru
dimensiunea curenta. De exemplu, fie ca Washington ~i Oregon sunt membri ai atributului State in
;tra dimensiunea Geography. Harta pastreaza ace~ti membri in ierarhia State de atribute, in felul urmator:
All_ Washington ~i All_ Oregon. Pastrand fiecare membru al ierarhiei atributului pe doua nivele, Analysis
Services poate utiliza harta pentru a gasi legaturile dintre membri in mod rapid, atunci cand se
nei interogheaza cubul. Evident ca harta dimensiunilor este un obiect comprimat ~i foarte eficient.
in cazul procesarii unui cub, Analysis Services, mai intai, imbina h8.rj:ile dimensiunilor din toate
dimensiunile utilizate in cub intr-o harta multidimensionala a cubului. Apoi, se citesc inregistrarile din
tabelele-fapte stocand valorile acestora 'in aria de stocare a datelor. Aria de stocare este eficient organizata
~i nu se ofera spatiu pentru acele combinatii de chei, ce nu contin nicio valoare.
dimensiunilor pot fi modificate, suprimand obiectele ~i schimband proprietatile. Fiind fa.cute aceste
modificari, deja, pot fi utilizati asistentii Schema Generation Wizard pentru a genera tabelele ~i SSIS or
T-SQL pentru a incarca datele in acestea cu scopul de a procesa cubul.
Object Explorer v ~ x
Co nn ect~ if >--f
i:f ~ MV (SQL Ser.rer 14.0.1 000.169 - MV\marian:l
::_ <~ MV (Microsoft Analysis Server 14.0.1.439' - ~!
,:. Databas es
Process XMLA
este in fereastra de interogiiri MDX, pot fi explorate metadatele pentru cubul Cubul de vinzari de
S' or pe fila Metadata, afi~ata in panelul din stanga. Interogiirile MDX sunt afi~ate in cfunpul de
interogare din partea dreaptii. Pot fi executate mai multe interogiiri MDX impreunii, dupii cum
sunt executate mai multe interogiiri SQL, adicii indicand comanda GO intre acestea. Panelul de
jos va apiirea in urma executiirii unei interogiiri MDX, in care se va afi~a rezultatul obtinut.
3. Ca rezultat al primei interogiiri, prezentate in figura de mai jos, in cfunpul de rezultate apare un
singur numiir - $80,450,596.98 . Acest numiir reprezintii totalul de vfulziiri ale miirfii ([Sales
ntru Dollars/).
rver Aceastii interogare este cea mai simpla interogare ce poate fi executata. Deoarece nu este
specificata nici masura implicit! a cubului, MDX selecteaza masura implicit! definita in cub,
liza. care poate fi vizualizatii in fila Cube Structure din Visual Studio.
te o Daca masura implicitii nu este definitii explicit, atunci, prima masurii creata in cub va fi
dar consideratii de sistem ca implicita. in plus, deoarece interogarea nu specificii membrii unei
dimensiuni, aceasta folose~te membrul implicit pentru fiecare ierarhie de atribute din fiecare
r-un dimensiune, care, la moment, este membrul All ~i extrage o singura valoare din cub
:ixa- reprezentata de tuplul din fereastra-rezultat.
ibul Un membru implicit existii pentru orice ierarhie de atribute a cubului, indiferent daca este
Un explicit aceasta definitii sau nu. In calitate de membru implicit este membrul All al unei ierarhii
ale de atribut, dar se poate seta un alt membru prin atribuirea unei valori proprietatii
din DefaultMember a atributului.
siile
1"-i' Functions
DX:
-in
121 %
)rile
Cubul de vinzari
. ~'i Messages .r··rm.··.··~.~.~~·lt.s"1
4. in a doua interogare, multimea de pe axa-coloane constii din doua unitati. Fiecare unitate
corespunde unui tuplu ~i fiecare tuplu, la randul sau, contine un singur membru.
- SEL ECT
{[Measures].[Sales Units],[Measures].[Sales Dol1ars] }ON COLUMNS
FROM [Cubul de vi nzari]
121 %
Pot fi adaugati alti membri din Measures, dar multimea trebuie luata in acolade -
{[mulfimea]). Acoladele nu sunt necesare in cazul utilizarii functiilor asupra multimilor, dar
ele devin necesare la crearea unei multimi constituite din doi sau mai multi membri.
Adresarea la o componenta din masura se executa cu ajutorul enumerarii prin punctul lui in
ierarhie. lata unele exemple:
[Date] - masura Date
[Date]. [Year-Quarter-Month-Date]-ierarhie Year-Quarter-Month-Date
[Date]. [Year-Quarter-Month-Date]. [Year] -nivel Year
[Date]. [Year-Quarter-Month-Date]. [Year] .&[2018-01-01] membru
data.
Includerea fiecarui element in paranteze patrate nu este obligatorie, dar deoarece mai multe
obiecte intr-un cub contin in numele lor spatii ~i simboluri speciale, utilizarea parantezelor
patrate este binevenita. Simbolul ampersend (&) inainte de numele membrului indicli la
referinta dupa cheie. Fiecare membru al masurii poate fi adresat atat in baza unui nume, cat ~i
in baza cheii. Ultima varianta de adresare este recomandata, deoarece identificatorul cheii
poate sa se deosebeasca de valoarea reala a campului.
5. in ultima imagine, sunt reprezentate doua interogari. Prima interogare afi~eaza informatia
statistica despre suma de bani ~i de unitati de marfli vanduta, grupata pe ani. Clauza NON
EMPTY indica sistemului sa afi~eze numai valorile nevide pentru dimensiunea [Year].
in a doua interogare, in calitate de coloana, este specificat numai anul 2011 ~i, in calitate de
filtru, este specificat un tip de produs anumit. Ca rezultat al executarii acestei interogari, se
obtine statistica despre suma de bani ~i de unitati de marfli specificata in conditia WHERE,
care este vanduta in anul 2011 (expresia [Product].[Product].&[310] este echivalentli cu
'Road-150 Red, 62').
121 % ~
Dupa cum se vede din exemplele de mai sus, limbajul de interogari MDX reprezinta un instrument
util pentru obtinerea rapida ~i simpla a informatiilor statistice din cuburile OLAP. Bineinteles ca
interogarile MDX pot avea un caracter complex, in functie de scopurile ~i de structura cubului in cauza.
1lade - Management Studio: in Object Explorer se face un click-drept pe cubul necesar ~i din meniul aparut se
or, dar alege Browse.
In SQL Server 2017 Analysis Services, navigatorul cubului este integrat cu constructorul de
I lui in interogari MDX ~i ofera o interfata grafica pentru generarea interogarilor MDX, filtrarea ~i decuparea
cuburilor, precum ~i aplicarea operatiilor drill-down in ierarhiile dimensionale.
Fila Browser are doua regimuri de functionare: regimul proiectare (Design Mode) ~i regimul
interogare (Query Mode). in ambele regimuri, pot fi utilizate obiectele din panoul Metadata pentru
explorarea cubului. Exista posibilitatea de glisare a membrilor din panoul Metadata in zona de interogare,
pentru a construi interogari MDX de preluare a datelor dezirabile.
embru
Imaginea de mai jos prezinta interfata navigatorului in regimul de proiectare grafica:
multe
ezelor Cubul devinzari [Bro-wse] .;;, X MOXQuery2.mdx -... u cub (l\/IV\marian}*
Metadata
Date
..
Hierarchy
Year
Operator
Range {lndus1ve)
Filter
Calendar 2011 · Calendar 201 2
Parameters
LJ
rmatia <Select dimension>
==
NON
Measure Group :
<All> .,,
' Year Quarter Month Date Sales Dollarn Sales Unls
ate de l ,~ Cubul de v1nzari
Calendar 2011 Quarter 1. 2011 Januaiy 2011 Saturday. Jan .. . 153840&.31... 2053
:~: .,D Measures
iri, se Calendar 2011 Quarter 1, 2[)11 March 2.!l11 Tuesda>/, Mar... 1165&S7.!l7 1512
::::; L) Sales
fERE, .,9 Sales Doliarn Calendar 2011 Quarter 1, 2011 March 2011 Thurnday , Ma ... 844720.5%3 1242
lta cu .,i Sales Unrts Calendar 2011 Quarter 2, 2011 May 2011 Sunda1·, May .. 2324135.79. 2963
+· l# KPls Caiendar 2ll11 Quarter 2. 2011 Ma;• 2011 Tuesday , Ma .. . 17029445-L 2245
'f 6: Date Calendar 2011 Quarter 3, 2.011 Jur,.2011 Fnday, Jurl l'.L 713116.!>943 852
+ l'.£ Product
Calendar 2011 Quarter 3. 2011 .AJ.Jgust 2011 Monday . .A.Jg .. . 1S007RB.S3 .. 2132
Calendar 2011 Quarter 3. 2011 August 2011 Monday, .Ai.Jg .. . 1455280.4 1... 1642
Calendar 2011 Quarter 3. 2011 September 2011 Thurnday, Se .. S8289S.9424 1260
Calendar 2011 Quarter 4. 2011 October 201 1 Saturda>/ . Oct ... 2269116.71 2965
Calculated Members
Calendar 2011 November 2011 Tuesday , No ... 10018113.7€. 2204
Thurn day. De... 2393589. 52.'' 7502
4
ROi•JS
Navigatorul cubului contine 5 paneluri principale:
1. Panelul Metadata. in forma de arbore sunt afi~ate masurile ~i dimensiunile cubului.
2. Panelul de selectare a cubului. Apasand butonul de pe acest panel, poate fi ales cubul necesar.
3. Panelul Data. in acest panel sunt afi~ate datele returnate de interogare.
• Se gliseaza obiectul Measures din arborele de metadate al cubului, pozitionat in partea
stanga a ecranului, spre panelul de date.
• Valorile Sales Dollars ~i Sales Units din panelul de date reprezinta totalurile generale ale
acestor doua masuri ale cubului. Aceste valori sunt echivalente cu utilizarea functiei de
agregare SUM aplicata pentru fiecare masura-coloana din tabelul-fapte.
• Masurile pot fi glisate una cate una in panelul de date, daca obiectul Measures este
expandat in arborele de metadate al cubului. Sau ele pot fi toate glisate in panelul de date
prin glisarea obiectului Measures.
• In panelul Metadata al cubului se expandeaza dimensiunea Date, apoi se gliseaza, in
nent panelul de date, ierarhia de dimensiuni Year-Quarter-Month-Date. Valorile agregate ale
s ca masurilor sunt repartizate, pentru fiecare inregistrare, valorilor dimensiunii.
i.
4. Similar cu panelul Metadata, panelul Calculated Menbers contine masurile valorile carora
reprezinta rezultatul unor operatii de calcul asupra masurilor reale. Ca analogie pot servi
campurile calculate din modelul relational.
7ube 5 Panelul Filter functioneaza similar cu expresia din clauza WHERE a limbajului MDX. in
·rver calitate de filtru pot fi selectate numai dimensiuni.
Servicii de analizii dimensionalii a date/or
in exemplul de mai sus, in calitate de filtru a fast aleasa dimensiunea Year care admite afi~area
vanzarilor numai din anii 2011-2012.
Merita atentie ~i cateva butoane de utilizare mai frecventa:
6. Butonul Auto Execute executa, in mod automat, interogarea ~i arata rezultatul de fiecare data
cand se face vreo schimbare. Rezultatele sunt prezentate in panoul Data.
7. Butonul Execute query executa interogarea ~i afi~eaza rezultatul in panoul Data.
8. Butonul Design Mode schimba regimul navigatorului intre modul Interogare ~i Proiectare.
in cazul in care se alege regimul de interogare, in locul panelului Filter sistemul afi~eaza codul
MDX generat in mod automat.
intrebari de control:
1. Ce este OLAP?
2. Care sunt componentele unui cub OLAP?
3. Ce sunt masurile ~i dimensiunile ce servesc drept baza de construire a acestor obiecte?
4. Care este legatura dintre un cub ~i proiect al Analysis Services?
5. Care sunt metodele de creare a unui cub multidimensional?
6. Cum poate fi vizualizata structura cubului?
7. Care sunt particularitatile limbajului MDX, in raport cu SQL?
Sarcini practice:
1. Sa se construiasca un cub OLAP, utilizand, in calitate de sursa de date, tabelele ce constituie
baza de date universitatea ~i viziunile create asupra acesteia.
2. Sa se scrie cate doua exemple de interogari MDX asupra cubului creat.