Sunteți pe pagina 1din 289

V313 O~ ue JBIN

V31 O~ e11e11A
CU PRINS
A A

CUVANT IN AINTE ........................................................................................................... 9


1. INSTALAREA ~I CONFIGURAREA SQL SERVER 2017 ................................... 13
1.1. SISTEMUL SQL SERVER 2017 ......................................................................................... 13
1.1.1. Baze de date client-server ................. ................. ..... ......... ............. .... .. ... ...................... 13
1.1.2. Faci/itiifi noi oferite de SQL Server 2017 ............. .............. ........ .... ....... ... ..... .............. 13
1.1. 3. Componentele logice ale sistemului SQL Server ... ..................... .......... ..... ................. . 14
1.2. INSTALAREA ~I CONFIGURAREA SISTEMULUI.. ................................................................ 15
1.2.1. Capacitiifile hardware !ji software necesare ................................................................ 16
1. 2. 2. Instalarea sistemului ...................... ..... ............ ....... ..... .... ..... ............. .......................... . 16
1. 2. 3. Configurarea sistemului ............................................................................................... 21
1.2.4. lnstalarea sistemului SQL Server Management Studio .. .... ................ .......................... 26
1.2.5. Inifializarea serviciilor ................................................................ ................................. 27
1.3. CONEXIUNEA LA SERVERE ..............................................•............................................... 28
1. 3.1. lnregistrarea serverelor ............................................................................................... 28
1. 3. 2. Excluderea unui se.r ver................................................................................................. 31
1. 3. 3. Modificarea fnregistriirii unui server........................................................................... 3 2
1.4. LOGINURI iN SISTEMUL SQL SERVER ............................................................................. 32
1.4.1. Autentificarea Windows ..... ........................................................... ...... ......... .. .............. 32
1.4.2. Autentificarea mixtii ..................................................................................................... 32
1.4.3. Conjigurarea modului de autentificare ....... ................... ..... ... ... ........ .. ...... ...... .... .. ....... 32
1. 4. 4. Crearea login-ului propriu ........................................................................................... 3 3
1.5. GESTIONAREA ROLURILOR ............................................................................................. 35

2. CREAREA ~I OORETINEREA BAZEi DE DATE ............................................... 39


2.1. FI~IERELE GESTIONATE DE SQL SERVER2017 ............................................................... 39
2.2. CREAREA BAZEi DE DATE ............................................................................................... 40
2.2.1. Lansarea SQL Server Management Studio pentru crearea bazei de date .................. .40
2.2.2. Aji!jarea !ji modificarea proprietiifilor bazei de date (General) ................................... 42
2.2.3. Consultarea !ji modificarea proprietiifilor bazei de date (Options) ............................. 44
2. 2. 4. Aji!jarea !ji adiiugarea grupurilor de fi!fiere ................................................................. 4 7
2.3. BAZE DE DATE DE SISTEM ............................................................................................... 49
2.4. CREAREA PLANULUI DE INTRETINERE ............................................................................ 50
2. 4.1. Crearea planului de fntrefinere cu ajutorul asistentului.............................................. 5 0
2.4.2. Crearea manualii a planului de fntrefinere ................................ .................................. 56
2. 4. 3 Exe cutarea planurilor de fntrefinere ........ ...... ............................................................... 5 7
3. CREAREA ~I MODIFICAREA TABELELOR IN SQL SERVER
MANAGEMENT STUDIO .......................................................................................... 61
3.1. TIPURI DE DATE .............................................................................................................. 61
3.1.1. Date numerice exacte ................................................................................................... 61
3.1.2. Date numerice aproximative ........................................................................................ 62
3.1.3. Date secvenfe de caractere........................................................................................... 62
3.1.4. Date binare ....... ............................................................................................................ 62
3.1.5. Tipuri de date datii/orii................................................................................................. 63
3.1.6. Tipuri de date speciale ................................................................................................. 63
3.1. 7. Date UNICODE ....................... ......................................... ......................................... .. 64
3.1.8. Ordinea de precedenfii................................................................................................. 64
3.2. CONSTAANGERI DE INTEGRITATE ................................................................................... 65
3.3. CREAREA TABELELOR .................................................................................................... 66
3.3.1. Un exemplu cu douii tabele ........................... ... .......... .............. .... ........................ ... .. ... 66
3. 3. 2. Definirea proprietiifilor tabelului ................................................................................ 67
3.3.3. Definirea coloanelor .................................................................................................... 67
3.3.4. Proprietiifile coloanelor .............................................................................................. 68
3. 3. 5. Stabilirea cheii primare ............................................................................................... 69
3.3.6. Salvarea tabelului ........................................................................................................ 70
3.4. ~TERGEREA, REDENUMIREA ~IACTUALIZAREA TABELELOR ........................................... 70
3.4.1. $tergerea tabelelor din baza de date ........................................................................... 70
3.4.2. Redenumirea tabelelor ................................................. ............... ...... ................... ........ 70
3.4. 3. Introducerea, editarea ~i ~tergerea date/or din tabele ................................................ 71
3.5. MODIFICAREA STRUCTURII UNUI TABEL ......................................................................... 71
3.5.1. Modificarea proprietiifilor coloanelor .................... ........ .. ............ .... ............. .......... ... 72
3.5.2. lnserarea unui camp nou ...................................................................... ...... .......... ....... 72
3.5.3. $tergerea unui camp existent ... .......................................... ............... .. .... ..... .. .......... .... 72
4. INSTRUCTIUNEA SELECT TRANSACT-SQL ..................................................... 75
4.1. lNCARCAREA TRANSACT-SQL QUERYEDITOR .............................................................. 75
4.2. FUNC'flONALITAp:LE COMPONENTEI TRANSACT-SQL QUERY EDITOR .......................... 76
4.3. ELEMENTE DE BAZA ALE INSTRUC'flUNll SELECT ......................................................... 78
4.3.1. Operatori ~i expresii utilizate fn interogiiri ................................................................. 78
4.3.2. Interogiiri simple....... ..... ...... ......................................................... .... ........................... 79
4.3.3. Limitarea numiirului de linii returnate ..................................... ....... ...... .......... .. ...... ... . 81
4.4. INTEROGARI CU JONCTIUNI ~I FUNC'fll.. .......................................................................... 83
4. 4.1. lnterogiiri cu joncfiuni interne ... .................................................................................. 83
4.4.2. lnterogiiri cujoncfiuni externe .................................................................... ... ....... ...... 84
4. 4. 3. Produsul Cartezian ...................... ... ........................................... .............. ....... ......... .... 85
4.4.4. Funcfii pe un sigur rand .............................................................................................. 86
4. 4. 5. Fune/ii de grup............................................................................................................. 88
4.5. SUBINTEROGARI ~I OPERATOR! PE MULTIMI ................................................................... 91
4.5.1. Subinterogiiri core/ate ~i necorelate............................................................................ 91
4.5.2. Subinterogiiri ce fntorc un scalar sau o linie .............................................................. 92
4.5.3. Subinterogiiri cu operatorul IN ................................................................................... 93
4.5.4. Subinterogiiri cu operatorul ANY................................................................................ 94
4.5.5. Subinterogiiri cu operatorul ALL ................................................................................ 95
4. 5. 6. Subinterogiiri cu operatorul EXISTS........................................................................... 96
4.5. 7. Subinterogiiri fn clauza FROM ............................ ........................ .... ........................... 97
4.5.8. lnterogiiri cu operatori din teoria mulfimilor.. ......... ............... ... ... .................... ...... .... 97
5. TRANSACT-SQL: INSTRUCfIUNI PROCEDURALE ...................................... 103
5 .1. BLOCURI ~I VARIABILE ................................................................................................. 10 3
5.1.1. Blocuri Transact-SQL. ..................................................................................... ... ....... 103
5.1. 2. Inifializarea variabilelor locale ................................................................................. 104
5.1. 3. Variabile globale ........................... ............................................. ....... ............. .... ....... 105
/

5.2. STRUCTURI DE CONTROL ALE FLUXULUI ...................................................................... 106


5. 2.1. Structura selectivii CASE .......................................................................................... . 106
5. 2. 2. Structura alternativii IF .. ELSE ................................................................................. 10 7
5. 2. 3. Structura repetitivii WHILE ....................................................................................... 108
5. 2. 4. Instrucfiunea BREAK ................................................................................................ . 109
5.2.5. Instrucfiunea CONTINUE .......................................................................................... 110
5. 2. 6. Instrucfiunea RETURN. ............................................................................................. . 110
5.2. 7. Goto-uri ~i etichete ..................................................................................................... 111
5.2.8. Operatorului WAITFOR ............................................................................................. 112
5.3. FUNCTII CU UTILIZAREA VALORII NULL. ..................................................................... 112
5.3.1. ValoareaNULL .......................................................................................................... 113
5.3.2.. Funcfia COALESCE .................................................................................................. 113
5. 3. 3. Funcfia ISNULL ......................................................................................................... 114
5.3.4.. Funcfia NULLIF ........................................................................................................ 115
5.4. EXCEPTII ....................................................................................................................... 115
5. 4.1. Gestiunea erorilor intr-un cod .................................................................................. . 115
5. 4. 2. Obfinerea iriformafiilor despre erori ......................................................................... 116
5.4.3. V ARIABILA GLOBALA @@ERROR ................................... :...................................... 117
5. 4. 4. Ridicarea unei excepfii ............................................................................................... 118
6. CREAREA TABELELOR ~I INDEC~ILOR ......................................................... 121
6.1. CREAREA ~I MODIFICAREA STRUCTURil TABELELOR IN TRANSACT-SQL ..................... 121
6.1.1. Instrucfiunea CREATE TABLE .................................................................................. 121
6.1.2. Instrucfiunile ALTER TABLE ~i DROP TABLE ......................................................... 123
6.2. GESTIUNEA INDEC~ILOR IN MICROSOFT SQL SERVER MANAGEMENT STUDIO ........... 125
6.2.1. Tipuri de indeqi utilizafi in SQL Server 2017 ........................................................... 125
6.2.2. Crearea indeqilor asupra tabelelor existente ........................................................... 127
6.2.3. Crearea indeqilor, pornind de la crearea tabelelor ................................................. 130
6. 2. 4. Modificarea indeqilor ............................................................................................... 13 0
6.3. GESTIUNEA INDEC~ILOR IN LIMBAJUL TRANSACT-SQL ............................................... 131
6.3.1. Crearea indec~ilor ...................................................................................................... 131
6.3.2. Modificarea indeqilor ............................................................................................... 132
6.3.3. Vizualizarea indeqilor ............................................................................................... 132
6.4. INSTRUCTIUNILE DE ACTUALIZARE A BAZEI DE DATE ................................................... 133
6. 4.1. Instrucfiunea INSERT ................................................................................................ 13 3
6. 4. 2. Instrucfiunea UPDATE .............................................................................................. 13 6
6.4.3. Instrucfiunea DELETE ............................................................................................... 138
7. DIAGRAME, SCHEME ~I SINONIME ................................................................. 141
7.1. DIAGRAMELE TN BAZA DEDATE SQL SERVER.............................................................. 141
7.1.1. Crearea diagramelor .................................................................................................. 141
7.1.2. Editarea diagramelor ................................................................................................. 142
7.1.3. Modificareaformei de vizualizare a tabelelor ........................................................... 145
7.2. ADMINISTRAREA SCHEMELOR ...................................................................................... 147
7. 2.1. Crearea schemelor in mediul SQL Server Management Studio ............................... . 148
7.2.2. Crearea scheme/or in limbajul Transact-SQL ........................................................... 149
7.2.3. Modificarea schemelor ............................................................................................... 150
7. 2.4. Deplasarea obiectelor in scheme cu ajutorul SQL Management Studio .................. . 151
7.2.5. Deplasarea obiectelor cu ajutorul limbajului Transact-SQL. ................................... 152
7.2.6. Interogarea scheme/or ............................................................................................... 152
7.2. 7. $tergerea scheme/or .................................................................................................. 152
7.3. CREAREA ~I SUPRIMAREA SINONIMELOR ...................................................................... 153
7.3.1. Ce este un sinonim? ................................................................................................... 153
7.3.2. Crearea sinonimelor fn SQL Management Studio ..................................................... 153
7.3.3. Crearea sinonimelor fn limbajul Transct-SQL .......................................................... 154
7.3.4. $tergerea sinonimelor ................................................................................................ 155

.
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

4. Revigorarea procesului de reconstruire a indexului online


SQL Server 2017 ofera o caracteristica-cheie - reconstruirea indexului online revigorat.
Introducerea acestei optiuni noi este utila in cazul in care fereastra de ti.mp pentru operatiunile de
mentenanta (intretinerea bazei de date) este limitata sau indec~ii sunt cu adevarat mari ~i dureaza mult
timp pentru a fi reconstruiti. Odata cu aceasta optiune, utilizatorul poate intrerupe operatiile de
reconstruire online a indexului ~i poate sa le pomeasca mai tarziu. Reconstruirea online revigorata permite
DBA-ului, de asemenea, sa repomeasca operatiunile de refacere a indexului online e~uat.
Pentru a minimiza volumul spatiului Jurnalului de tranzacfii (Transaction Log) necesar pentru o
operatie de reconstruire online, SQL Server 2017 permite trunchierea Jurnalului de tranzactii, in ti.mp ce
se executa o operatie de reconstruire online a indexului. La fel ca ~i in cazul altor functii noi, Microsoft
ofera o noua viziune (view) de sistem, numita sys.index_!'esumable_operations, care permite
monitorizarea operatiilor de reconstruire a indec~ilor online.
Cu alte cuvinte, aceasta caracteristica, in principiu, permite, dupa o pauza, reluarea reconstruirii
unui index online ~i ofera o optiune de executare, suspendare, reluare sau anulare a unei operatii de index.
Atunci cand refacerea indexului este anulati, intregul proces de reconstruire a indexul trebuie sa fie reluat
din nou.
5. Model nou de securitate a rutinelor CLR
Odata cu introducerea SQL Server 2017, Microsoft a schimbaf modelul de securitate pentru CLR-
uri (Common Language Runtime). Aceasta facilitate a fost realizata cu scopul de a raspunde securitatii
accesului la coduri CAS (Code Access Security) din .NET Framework, care nu mai este acceptata drept
limita de securitate, ceea ce inseamna ca o asamblare marcata ca SAFE ar putea sa execute un cod nesigur
sau care acceseaza resurse exteme de sistem.
Pentru a inlatura posibilele lacune In securitate la nivelul CLR-urilor, 'in SQL Server 2017, este
implementata o noua optiune de configurare numita "CLR strict Security" ~i o noua procedura stocata de
sistem numita sys.sp_add_trusted_assembly. in cazul cand este activata optiunea de configurare "CLR
strict Security", ea face ca toate ansamblurile SAFE ~i EXTERNAL_ACCESS sa fie tratate ca ~i cum ar fi
UNSAFE. De mentionat ca aceasta optiune este activata in mod implicit.
Optiunea "CLR strict Security" poate fi dezactivata pentru compatibilitate descendenta, dar acest
lucru nu este recomandat. Microsoft recomanda ca CLR-urile sa fie executate cu optiunea activata, iar
toate ansamblurile SAFE ~i EXTERNAL_ACCESS trebuie sa fie semnate, precum ~i bazele de date CLR
trebuie marcate ca fiind ,,de lncredere". Pentru a realiza acest lucru, 'in SQL Server 2017, se utilizeaza
procedura stocata mentionata mai sus - sys.sp_add_trusted_assembly. Aceasta procedura stocata adauga
rutina CLR In lista ansamblurilor de mcredere, 'in a~a-numita lista alba.
6. Oppunea IDENTITY_CACHE
in versiunile precedente ale sistemului, In cazul in care SQL Server era oprit neregulamentar,
valorile coloanei Identity erau ~terse din memoria cache. Astfel, era posibila aparitia unor lacune in ~irul
de valori Identity. Pentru prevenirea unor astfel de situatii pe viitor, in versiunea 17, a fost implementata o
noua optiune, care permite dezactivarea cache-ului pentru Identity. Deoarece aceasta optiune se specifica
la nivelul bazei de date, o baza de date poate fi folosita cu cache-ul dezactivat, in timp ce alte haze de date
pot utiliza vechiul comportament de gestiune a valorilor Identity.
7. Prelucrarea adaptivi a interogirilor
SQL Server 2017 introduce o generatie noua de functii de procesare a interogarilor cu scopul
'imbunatatirii performantelor interogarilor in SQL Server prin adaptarea la mediul de incarcare a
aplicatiilor. Aceasta caracteristica include urmatoarele optimizari:
• Recuperarea alocarii memoriei (feedback-ul tamponului de memorie temporar furnizat) In
modul batch.
• Jonctiuni adaptive in modul batch;
• Executie intercalata a functiilor cu valori tabelare cu mai multe instructiuni.
Cuvant 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

1. INSTALAREA $1 CONFIGURAREA SQL SERVER 2017


In acest capitol sunt tratate problemele cu privire la instalarea SGBD-ului MS SQL Server 2017,
gestiunea serviciilor ~i inregistrarea unui server, lucrul in mediul SQL Server Management Studio, precum
~i administrarea securitatii ~i a accesului la baze de date. In afara de aceasta, sunt examinate tehnologia
client-server, componentele logice ale sistemului MS SQL Server 2017 ~i principiile de gestiune ~i
partajare a accesului la date [4] .

1.1. Sistemu/ SQL Server 2017

1. 1. 1. Baze de date client-server


Pana la aparitia SGBD-urilor de tip client-server, stocarea datelor ~i procesarea lor avea loc pe
acel~i calculator. Dupa aparitia retelelor locale, bazele de date au fast transferate pe calculatoarele
centrale. Daca un terminal solicita realizarea unei interogari asupra unui tabel din baza de date, intreg
tabelul era transferat pe calculatorul terminal ~i aici se efectua procesarea datelor. Dar daca exista mai
multe calculatoare, care executa aceea~i cerere, in acela~i timp ~i asupra aceluia~i tabel? Evident, se va
produce o cre~tere semnificativa a traficului in retea, o scadere a vitezei. de procesare ~i, in consecintii, vor
aparea multe gre~eli in sistem.
In bazele de date client-server, situatia descrisa s-a schimbat considerabil ~i, potrivit exemplului de
mai sus, interogarea solicitata de terminal este procesata de server, sau un grup de servere unite intr-un
cluster sau cloud, iar la terminal se expediaza numai raspunsul. Astfel, se reduce fluxul de date in retea,
cre~te eficienta sistemului, mic~orand-se numarul de gre~eli.

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

• SQL Server 2017 Developer Edition


• SQL Server 2017 Express Edition

1.1.3. Componentele logice ale sistemului SQL Server


Datele, lntr-o baza de date SQL Server, sunt organizate in mai multe obiecte diferite. Microsoft de
la o versiune la alta dezvolta sistemul prin introducerea unor tipuri noi de obiecte care maresc flexibilitatea
sistemului ~i o fac mai robusta ~i utila. Aceste obiecte sunt ceea ce un utilizator poate sa vada cand se
conecteaza la o baza de date. Unele din tipuri de obiecte sunt specifice doar pentru sistemul SQL Server.
Altele, sunt specifice oricarui SGBD relational. in continuare, este prezentata o scurta caracteristica a
celor mai importante ~i des utilizate componente ale unei haze de date.

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.

1.2. lnstalarea t;i configurarea sistemului


Pentru instalarea sistemului SQL Server 2017, se parcurg trei etate consecutive [4] :
1. Controlul necesitiitilor hard ~i soft, controlul configuratiei sistemului, controlul setiirilor de
securitate.
2. Derularea procesului de instalare a sistemului SQL Server.
3. Utilizarea instrumentelor SQL Server pentru configurarea SGBD-ului.
lnstalarea ~i configurarea SQL Server

1.2.1. Capacitafile hardware !ji software necesare


Realizarea instalarii necesita, in primul rand, cuno~tinte cu privire resursele hardware. Necesitatile
minime pentru SQL Server 2017 difera in functie de versiunea aleasa. in tabelul de mai jos, se pot vedea
cerintele generalizate pentru SGBD-ul SQL Server 2017 pentru platforma Windows OS [26].

Hardware Configurafie minima


Procesor Frecvenfa minima:
Procesor x64: 1.4 GHz (2.0 GHz sau mai rapid, recomandat)
Tip procesor:
Procesor x64: AMD Opteron, AMD Athlon 64, Intel Xeon cu Intel
EM64T, Intel Pentium IV cu EM64T
*Procesoarele cu arhitectura x86 nu mai sunt suportate.
MemorieRAM Minimum lGB (4GB sau mai mult, este recomandat), pentru Express
Edition minimum este 512Mb (lGB recomandat).
Disc Drive DVD ROM Drive pentru instalare de la disc optic
Spatiu pe discul rigid in functie de configurarea aleasa, minimal necesita 6 GB
Monitor Rezolutie Super - VGA 800x600 sau mai mare

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

1.2.2. lnstalarea sistemului


Procesul de instalare a SGBD-ului SQL Server 2017 pe Windows OS se poate deosebi in functie de
editie ~i componentele selectate spre instalare. incepand cu SQL 2016, procesul instalarii sistemul a suferit
unele modificari. Interfetele grafice de gestiune ~i dezvoltare se instaleaza aparte. Exemplul procesului de
instalare a sistemului descris mai jos poate fi impaqit in 4 etape separate:
• Instalarea serviciilor MS SQL Server 2017 Development Edition x64 (utilizand asistentul)
• Instalarea Microsoft SQL Server Management Studio 17.x
• Instalarea Microsoft SQL Server Data Tools
• Instalarea SQL Server Reporting
Daca nu dispunem de kit-ul de instalare pe un CD, la momentul scrierii acestei caqi, kit-ul era
disponibil pentru descarcare sau chiar poate fi instalat direct de pe urmatorul link [21].
Pentru descarcare, se apasa Download now sub optiunea "Development Edition" ~i apare
urmatoarea fereastra cu 3 optiuni, unde se alege descarcarea fi~ierelor de instalare pe ma~ina locala.
lnstalarea # conjigurarea SQL Server

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;

Home Share Vi ew Manage

1' ~ ~ My computer • DVD Drive. (G:) Sq15e:tu p_x54_ENU

Receont place,, 1033_ENU_LP


redist
~ H o m e.g rou p res.ources
Too ls
:~· My computer x54
Jlt Desktop -~, autorun .inf
•.. Doc uments
;;;. Downl oa ds
;.\ Music
;. Pictures
31 Videos
1m1 OS (C:)
l.....Jll DO CS (D:)
lnstalarea fi configurarea SQL Server

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.

SOL Server Installation Center

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.

Install SQL Server Data Tools


Launch a dow nload page that provides a link to install SQL Server Data Tools (SSDT).
SSDT provides Visual Studio integratio n including project syste;m '.•upport for Azure
SQL Database, the SQL Se;rver Databa se Engin e, Rep orting Services, Analysis Services
and Integrati on Services. An internet connection is required to install SSDT.

New SOL SErver failover clu>ter installation

3. Prima fereastra a asistentului de instalare este Product key. Se activeaza radio-butoanele


respective pentru a indica varianta gratuita sau cu plata a sistemului SQL Server. Daca este
activat butonul Specify a free edition, mai jos, devine activ un check-box, unde se poate alege
o versiune gratuita a sistemului SQL Server. In cazul in care se alege varianta cu plata (se
activeaza butonul Enter a product key), pentru a continua instalarea, este necesara inserarea
numarului de identificare a produsului (PID) ~i apoi se apasa butonul Next.

SQl Server 2017 Setup

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

qi SOL Server 2017 Setup


rdd
License Terms
To insta ll SQL Server 2{)17, you must acceptthe Micros:oft Softwa re Licen<.e Terms.

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

< l!.ack Cancel

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

Prod uct Key


Microsoft Update oilers secu rity and o ther ·mportant upda:es fe r "Nindows and ob er Mic roso?:
Lic en!ie Term s: softw are, including SQL Se~Jer 20 17. Updates are del ive red using Au tomatic Updates, or you can visit
Glo bal Rules the M icroso~ Update websit e.

Miuosoft Update ~Use Micro<oft Updat e to c heck for u pdates (recommended )


Pro duct Updates
Microso't Update FAQ
Install Setup Files
Install Rul.es Microsoft Update Privacy Statement

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.

SQL Server 2017 Setup - Cl . .

Install Rules
Setup rules identify potential problems that might occu r white running Setup. Failures must be corrected before Setup
ca.n t:ontinue.

Product Key Operation completed. Passed : 3. Fai led 0 . Warning 1. Skipped 0.


Li cense Terms
Global Rules
Microsoft Update Hide detail~ <<. B.e-run
Product Updates View detailed report
ln>tall Setup Files
I nstaH Rules Rul e Status
Feature SEi ection iJ; Fusio n Active Template Library (ATL)
Feature Rules ~ Consirtency validation for SQL Server registry keys Passed
Feature Configuration Rul e;; ii)' Comp uter domain controller Pas>ed
Ready to Install J'). Windo ws Firewall Warning
Installation Progress

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

SQL Server 2017 Setup

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.

SQL Server 2017 Setup

Server Configuration
SJ>ecify the service accounts and collation configuration .

Product Key ::................................................


Sero/ice Acco unt' '; Collation

___ ____
License Terms
Mic ro soft rec ommends that you use a separat e accoun t for each SQL Server serv ice.
Global Rules .,... """"""""""'~'"""""'

Microsoft Update Service Acco unt Name Pa»word Startup Typ.o


- --~· ~

Product Updates , SQL Server Agent NT Service\ SQLSERVERA ... Automatic ...
Install Setup Files
Install Rules
· SQL Server Databa se Engine

,.: SQL Server Analy,is Services


NT Service\MSSQLSERVER
NT Service\MSSQLSer1er .. .
- - "'
Autom ati c
Automatic ....
Feature Selection
' SQL Serier Integration Services 14.0
............
' NT 5er1ice\ MsDtsSer1er140 ' Autom atic ...
Feature Rules SQL Ser1er Integrati o n Serlices Sea l... NT Ser1ice\55155cale0ut... Manual ...
Instance Configuration l SQL Ser1er Integrati o n Seriices Seal ... NT Serv ice\ SSISScaleOut... Ma n ua l ...
Server Conf"rguration Ma nual ...
Database Engine Configuration SQL Sewer Distributed Replay Co ntr ... Manual
Analysis Services Co nfiguration
j
SQL Full-text Filter Daem on Launcher Manual
"'
Integration Services Sca le Out ... , SQL Server Browser NT AUTHORITY\LOCAL S... Disabled ...
Integration Services Scale Out ...
Di stributed Replay Controller C ~ra n t Perform Volurne ~;1ai nten ance Task pri'1ilegeto SQL Server Databas.e Engine Seriice

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.

, Ready to Insta ll Click here for detoils


1

Pentru alocarea serviciilor pe conturi, se populeaza campul Account Name. Microsoft


recomanda sa nu se lase campul Password necompletat. in cazul dat, se aleg conturi definite
in sistemul de operare local sau in domen (NT AUTHORITY\SYSTEM). Aceasta inseamna
ca serviciile vor fi rulate de sistemul de operare din numele contului local.
Tot in aceasta fereastra pot fi specificate serviciile care vor fi lansate in mod automat, manual
sau dezactivate. Pentru o buna des:f'~urare a lucrarilor practice, este nevoie de serviciile SQL
Server Database Engine, SQL Server Agent, SQL Server Analysis Server, SQL Server
Integration Services. Restul serviciilor vor fi lansate manual, dupa necesitate. (Este important
sa se tina cont de faptul ca utilizatorii simpli nu pot lansa procese de sistem.)
3. in fereastra Database Engine Configurafion se alege modul de autentificare de tip Windows
sau de tip Mixt (autentificarea SQL Server impreuna cu autentificarea Windows). in cazul in
care se alege modul Mixt de autentificare, automat se activeaza login-ul de SQL Server
system administrator (sa), care este predefinit in sistem. Pentru acest cont, este necesar sa se
creeze paro la de acces (campurile Enter password ~i Confirm password) .
Pentru a trece la tab-ul urmator trebuie specificat eel putin un utilizator care ar avea rol de
SQL Server administrator de tip NT. Daca se dore~te ca acest rol sa fie atribuit utilizatorului
curent, se apasa butonul Add Current User. Pentru a alege alt cont de administrare a
sistemului SQL Server, se apasa butonul Add. Daca se dore~te sa se excluda vreun cont din
lista administratorilor, se apasa Remove.
lnstalarea 1i conjigurarea SQL Server

SQl Server 2017 Setup

Database Engine Configuration


e Specify Database Engine authentication security mode; administrators. data directories and TenipDB setting;,
e
Product Key SerJer Configurat ion Data Directories TempDB FILESTREAM
License: Terms
Specify t he authent ication mode and administra tors for the Databa:;.e Engine.
Global Rules
Mic.ros:oft Update Authent icatio n Mode:
Product Update'
··.·-~) "W_indmvs a_uthenti-ca tion roode
Install Setup Files
r.~ 1 MJxed Mo.de (SQL Server au then tlc.ati-on and Windows: au thentica tion)
Install Rul es
Feature Selectio n
Feature Ru les

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

< §_ack Next >

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.

SQL Server 2017 Setup

Database Engine Configuration


Spe.c ify Database Engine authentication secu ri t-; mode. administrator.;, data directories and TempDB settings.

Global Rule' Ser1er Configuration Data Directories TempDB FILESTREAM


Product Update<
Install Setup Files Qata root directory: ( :\ Program Files\Microsaft SQL Server

lmtall Rules System dat abase di rec tory ( :\ Program Files.\ Mic roso ft SQL
Installatio n Type Server\ MSSQL14.MSSQLSERVER\ MSSQL \ Da ta

Product Key .U.s er d atabase directer; : D:\ DAT A


License Terms
User database [og direct ory: D:\ LOG
Featu re Selection
Feature Rules Backup directory: F:\ BACKUP
Instance Configuration
Server Configu ration
Database lngine Configuration

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

SQL Server 2017 Setup

Database Engine Configuration


Specify Database Engine authentication security mooe, administr.ators, data directories and TempDB setting>.

Product Key Server Configurat ion Data Directories TempDB FILESTREAM


License Tern15
TempDB data files: tempdb.mdf. tempdb_nmql_;<.ndf
Global Ru les
Microsoft Update N!!f1'ber of files: 4

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

< aack Next> Cancel

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.

Analysis Services Configuration


SOL Server 20 17 Setup
CJ-
Specify Analysis Se1vices server mcdes, administrators, and data directories.

Product Key Server Config uratio n Data Di rectories


License Terms
Ser1er Mode:
Global Rules
'! · Multidimensional and Data Mining Mode
Microsoft Update
Produ ct Updates
'=.! labu lar Mode
'£0;.-erPivot Mode
Install Setup Files
Install Ru les Specif/ which us-e-r.s have 3dministr.ati~:e pe:rmlss1ons for Analy~1s Ser:ices.

Feature Selection Analysis Ser1ices


Feature Ru les admi n istrators h ave
unrestricted access to
Instance Configu ration Ana lysis Ser1ices.
Server Configuratio n
Database Eng ine Config uration
Analysis Seivices Confiquration
Integration Services Scale Out ...
Instalarea # configurarea SQL Server

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.

SQL Server 2017 Setup

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

1.2.4. lnstalarea sistemului SQL Server Management Studio


Urmatoarea etapa consta in instalarea sistemului SQL Server Management Studio - un instrument de
gestiune ~i programare a bazelor de date SQL Server.
Pentru instalarea sistemului Management Studio, se parcurg urmatorii p~i: simpli:
1. Din SQL Server Installation Center se alege a treia optiune - Install SQL Server
Management Tools

SQL Server Installation Center

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.

ln>tall SQL Server Data Tools


Launch a download page that provides a link to install SQL '>erver Data Tools (SSDT).
S.SDT provides Visual Studio integrati on including project system support for Azure
SQL Database, the S.QL Ser1er Databas e Engine, Reporting Services, Analys is Ser1ices
and lnt!'gration Ser1ices. An internet con nection is required to instal l SSDT.

New SQL Ser1er fail over cluster in>tallaticn


Launch a w izard to imtall a single-node SQL Server 2017 failover clu ster.

~1r Add node to a SQL Server fail over cluster


fJI
¥ Laun ch a w iza rd to add a node to an existin g SQL Server 2017 fail over cluster.

Upgrade frcm a previous version cf SQL Server


Laun ch a wiza rd to upgrade a previou s version of SQL Ser1er to SQL Server 2017.

:.'\./: New Machine Learning Server (Standalone) installation


Microsoft SQL Server 2017
"'1.;J Launch a wiza rd to install Machine Learning Server (Standalone) on a Wi ndows
machine. This is typi_callv used by data scientist; as a standalone analys is server or as a

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

4. Dupa ce procesul de instalare s-a mcheiat, probabil ca asistentul va cere un restart al


sistemului de operare.

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:

Sql Server Configuration Manager Cl . .

File Acti on View Help

··~ 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

AlwaysOn High Availab~ity St~rt!Jp Parameters


Service FILESTREAM
?- ·
Advanced

I
.tart

\ uto1
itlanL

~c Pro~iram ;:lh':!s'J.i;UC•SC<ft s·x Se,,


El General \uto1
ition
B1n~1ri Path l.uto1
urati
\UtOI

" \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,

Cancel Apply Help

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.

1.3. Conexiunea la servere

1.3.1. inregistrarea serverelor


Atunci cand are loc instalarea sistemului SQL Server, serverul local se inregistreaza in mod
automat. Functia de inregistrare a serverelor se aplica in cazul in care se dore~te accesarea sistemului SQL
Server instalat pe alt calculator. Aceasta procedura poate fi realizata utilizand SQL Server Management
Studio :
1. Se activeaza 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 2017 Management
Studio
4. Dupa aplicarea unui click pe optiunea SQL Server 2017 Management Studio, se deschide o
cutie de dialog de conectare a clientului (interfata grafica) la SQL Server. Aici se alege tipul
serviciului la care se dore~te conectarea, numele serverului, tipul de autentificare, loginul ~i
parola. Ecranul Jui este similar celui prezentat in figura de maijos:
Instalarea # configurarea SQL Server
1·---·-·-·····-----·-···--···- ·-------···"····· ·------------
Q' Connect to Server

SQL Server
Server type : Database Engine v

:S,erver name : j v

bifhentication: SQ L Server A.rthentication ..,


boQin sa ..,
P,assword :
0 Remember password

,_ !:;,onnect ..! Cancel Help Qptions >)

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

area ft Ser1er Objects Databases


Replication Security
r de .. PolyBa se Server Objects
·+ A.lways On High Availability Replication
Management PolyBa.se
Integration Services Catalogs Always On High Availability
• l~ SQL Ser.'er Agent Management
·• El XEvent Profil er Integrati on Services Cat al a ...
xr!J SQL Server Agent
11od El XE.vent Profi ler
QL
ent ~ MV (SQ L Server 14.0 .1000.1 69 - sa)
10 ltems

- - --~

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
. ~

Object Explorer ... ~ x


Connect• f xv Ga
t":I ~ L~ MV (
Databases
rn
Security Disconnect
Server Objt I
Reg ister .. .
Replicatior _\
n •.1.,n---
"'"''"' [)11"'" '

7. Pe ecran, apare fereastra New Server Registration . Prima fila General.




Casuta de dialog Server name. Aici se scrie sau se selecteaza numele serverului.
~
In casuta de dialog Authentication, poate fi definit tipul de autentificare utilizat pentru
.
conectare. in cazul in care se alege optiunea de autentificare Windows authentication ,
utilizatorii, care vor dori sa se conecteze la acest server nou, vor trebui sa intre in sistem
cu un login valid pentru acesta.
Daca optiunea aleasa este SQL Server Autentification, utilizatorii trebuie sa foloseasca
un login lnregistrat In SQL Server, independent de loginurile sistemului NT. Trebuie
mentionat ca, in casutele de editare Login Name ~i Password, existente in sectiunea In
chestiune, trebuie sa fie completate loginul ~i parola valida pentru acest server.
• Registered server name implicit reprezinta numele serverului, care poate fi rescris cu un
nume mai semniftcativ. De exemplu, un server denumit TSAKK32440 poate fi lnregistrat
cu un nume mai semnificativ, ca de exemplu -LOCALDEVJ.

General
New Server Registration

Connection Properties .ADdrtional Connection Parametern General


New Server Registration

Connection Properties Mdttional Connection Parameters


Type or select the name of the database for the connection .

Login
Connect to gatabase. .Adventure Works201t1
Type the server name. or choose rt from the drop-down list .
Networl<
Network protocol: ~ default>
.Server name : MV
Network Qacket size : 4096 . bytes
&.rthentication: SQ L Server !IJ.Jthentication
Connection
l,ogin : sa
Connection time-<Jut : 3U . seconds
f.assword :
~ut1on time-<lut : 0 . seconds
RI Remember password
0 Enciypt connection
Registered server 0 Trust ~erver certificate

You can replace the registered server name wrth a new name and 0 )J_se custom color: D
optional server description .

Registered server rrame ·


LOCALDEVl _B.eset .All

Registered server QeSCliption ·

Say_e Cancel Help Sa:,:e Cancel Help


Instalarea ~i configurarea SQL Server

8. in fila alaturata, Connection Properties, se fixeaza proprietatile de conexiune ale serverului.


Pot ft specificate mai multe optiuni de conexiune:
• Baza de date la care serverul se va conecta implicit.
• Protocolul folosit pentru conexiunea la server.
• Dimensiunea implicita a pachetelor transmise in retea.
• Durata procesului de conectare.
• Durata procesului de executie ~i altele optiuni.
9. Apasand butonul Test, pot fl verificate setarile conexiunii, inainte de salvare. Pentru a viziona
lista serverelor inregistrate de SQL Management Studio, in fereastra principala, se lanseaza
meniul View ~i se face un click pe meniul Registered Severs.
Precum se vede din figura de mai jos, apare o fila cu un camp de obiecte Registered Servers.
Expandand elementul Database Engine ->Local Server Group, se alege serverul necesar,
apoi se da un click-drept ~i, din meniul de context, se selecteaza optiunea Object Explorer. In
• consecinµ, apare un dialog-box de conectare la serverul respectiv, astfel utilizatorul putand
gestiona in interfata Object Explorer serverul dezirabil.

..,
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.

1.3.2. Excluderea unui server


Procesul de excludere a unui server este foarte simplu. Pentru aceasta, este suficienta executarea
unui click cu butonul drept al mouse-ului pe imaginea serverului respectiv in fila Registered servers din
partea dreapta a ferestrei SQL Server Management Studio. in meniul de context aparut, se actioneaza
optiunea Delete ~i apoi se confmna aceasta alegere.
lnstalarea ~i configurarea SQL Server

1.3.3. Modificarea inregistrarii unui server


Pentru executarea acestei sarcini, trebuie parcursa urmatoarea cale:
1. Se aplica un click-drept pe serverul care va fi editat in fila Registered servers.
2. in meniul de context aparut, se actioneaza optiunea Properties.
3. in acest punct, apare fereastra, deja, cunoscuta. Se selecteaza optiunile necesare ~i se confirma
alegerea cu un click pe butonul Save.

1.4. Loginuri in sistemul SQL Server


Pentru conectarea la SQL Server, utilizatorul trece prin doua etape: autentificarea ~i validarea
permisiunii. Autentificarea identifica utilizatorul prin contul loginului ~i are functia de verificare a
conditiilor de conectare la baza de date. Daca autentificarea este realizata, adica, daca loginul de
autentificare este acceptat, utilizatorul este conectat la SQL Server ~i, in acest punct, utilizatorul trebuie sa
obtina permisiunea de conectare la baza de date de la un server anume. Acest proces este realizat cu
ajutorul conturilor login in baza de date ce va fi utilizata. SQL Server utilizeaza doua tipuri de
autentificare [4].

1.4. 1. Autentificarea Windows


Atunci cand la conectarea la SQL Server se folose~t~ Autentificarea Windows, nu trebuie
specificate loginul ~i parola. Accesul la SQL Server este controlat de contul sau grupul Windows NT, care
este autentificat la loginarea la sistemul de operare pe client. Astfel, ill acest tip de autentificare, contul
utilizatorului din SQL se compara cu loginul Windows NT al utilizatorului. in cazul In care ele sunt
compatibile, SQL accepta loginul. Daca ele nu sunt compatibile, utilizatorul nu este conectat la sistemul
SQL Server.

1.4.2. Autentificarea mixta


Autentificarea mixta este un serviciu de autentificare independent de sistemul de loginare al
Windows, gestionat de insu~i SQL Server. Daca, la conectare, un utilizator furnizeaza un login SQL
Server, acesta este autentificat, folosind autentificarea SQL Server. insa trebuie sa se tina cont de faptul ca
pentru a initializa o conexiune la SQL Server, utilizatorul are nevoie sa intre in mediul Windows, fapt ce
implica, mai intai verificarea accesului la nivel de sistem de operare. Pentru a gestiona serviciile SQL
Server, pomirea ~i oprirea lor, utilizatorul SGBD-ului SQL Server trebuie sa aiba permisiuni de
administrator local al sistemului de operare.

1.4.3. Configurarea modului de autentificare


Configurarea modului de autentificare in SQL Sever este o activitate simpla. Pentru aceasta, se
realizeaza urmatorii pa~i:
1. Se efectueaza un click-drept pe serverul in chestiune In fereastra Object Explorer.
2. in meniul de context, se actioneaza opfiunea Properties.
3. In campul Select a page se selecteaza Security. in acest punct, va aparea urmatoarea fereastra:
in fereastrA, se marcheaza Windows Authentification mode sau SQL Server and Windows
Authentification mode, in functie de tipul de autentificare care trebuie sa-1 asigure sistemul
SQL Server.
Instalarea 1i configurarea SQL Server

Selecta page
1" General
.D' Script ...
Server Properties. - MV
Help
r:i -
1" Memory

ma
,,
1' Processors

}I Connections
Server authentication

,) Y'{1ndows Authentication mode


J; Database Settings
J; Advanced '! ' 9_Q L Server and Windows ALllhentication mode
J; Permissions
login auditing
rea ' None
ea !ti: ' Eailed logins only
de
S1,1ccessful logins only
sa
Jl.oth failed and successful logins
cu
de Server proxy account
[] Enable ser<!_er proxy account
Connection
Server:
MV
iuie Connection:
Options
MV\rnanan
are
v¥ View connection properties [J Enable CQ.mmon Criteria compliance
1tul
unt
0 £nable C2 audrt tracing

nu) (Joss database ownership chaining

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:

File Edit View Debug Tools Window Help


- ~ lil-.i ..~ New Query .,1§1 J2' JSc'l ~~ 01'.i?l
IWS
nul Object Explorer
Connect.. f ). .. Back F ' c;rd
'
id M~l (SQL s~~,,e~ 14,Q.1000.159 - MV\ maria1i MV (SQL Ser.'er 14.0.1 000.1&9 - MV\mc
+ Databases i
Security r\Jame
-
!N+ :X 4MS_PolicyEventProcess:i .. .
+
'""'
Serv
New Login ... :X ;tt;ttMS_PolicyhqlE.xecutio .. .
i} Cree Filter i:. lv1\l\ marian
i± Cry~ ' NT AUTHORIT'f\SYSTEl'v1
Instalarea ~i conjigurarea SQL Server

4. in meniul de context, se actioneaza optiunea New Login. Apare urmatoarea fereastra:

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

Connection Ci Mapped to aS)mmetric key


Server: 0 Map to Credential
MV
Mapped Credentials
Connection:
MV\ marian

y>; \'iew connection properties

Pr<>!J'SS
Ready master
Default gatabase:

Default language : <default>

5. Se selecteaza optiunea SQL Server Autentification.


6. in casuta de editare Login Name, se introduce un nume al utilizatorului.
7. in casuta de editare Password, se introduce o parola a utilizatorului.
8. Apoi se seteaza urmatoarele radiobutoane (sunt descrise doar cele care prezinta interes la
moment ~i sunt des utilizate):
• Enforce password policy Se cer respectate normele de creare a parolei pentru
utilizatorul dat. Aceasta este setarea implicita la alegerea autentificarii SQL Server. Se
recomanda sa fie lasata activa.
• Enforce password expiration Activarea politicii timpului de expirare a parolei
(schimbarea periodica a parolei pentru a preveni accesul neautorizat).
• User must change password at next login SQL Server va cere setarea unei noi parole la
prima accesare a contului nou-creat.
9. Dupa finalizarea selectarilor, se actioneaza butonul OK
Trebuie mentionat faptul ca a fost creat un login numit Ion , precum e prezentat 'in figura ce
urmeaza:
lnstalarea 1i conjigurarea SQL Server

file f,dit !!Liew Iools 1N indow !:J.elp

ra .
Ill Object Explorer Details -ti X

Back ii'.0, ;;• ' + ~ T G --i

1± Databa se>
1- Security fl.Jame

f .' Logins ~ #+rMS_PolicyEventProce:;si.,,


±• Server Roles ~ #~MS_PolicyTsq!Executio.,,
• i''..-,.~..,_...,_...,...,.._ •._.._•.·~··...--··-·.-·..~·--·-·-~
T Credentials .. i t .. -...._.... _ _ ,._ ..... , ...._. ~-~-~---~---·-· ......... _.

'f Cry ptographic Providers .:i MV\ marian


+ Audits ~ f\IT lll ITHnRITV\W<\TF~.~

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).

1.5. Gestionarea rolurilor


Atunci cand se instaleaza sistemul SQL Server, se creeaza diferite roluri. Rolurile au functia de
prezentare ~i gestionare a activitatilor realizate pe server. Acestea sunt pastrate in mapa Security,
elementul Server Roles, precum e prezentat in fereastra ce urmeaza:

file Idit Y:iew Qebug Iools ~i ndow .!:!elp

Object Explorer " f}. x ·Object fxptorer Details 'P X

Connect? ¥ >y T C ..J.i. Back • •.r "


~ rf rv1;/ (SQL S;rver 14.o. 1oro15g·_ f.,1V\. maria;·1 MV (5QL Server 14.G.1000.169 - M\
, +: Databas.es
Name.
·~ ~u~
.
II
+ L.ogtns 1 ? bulkadmin
+ ? dbcreator
+ Credentials 0: di skadmin
Cryptographic Providers J. processadmin
Audits 111:. public
+ Server Audit Specifications 0: sec urityadmin
Server Objects 0: serveradmin
Replication

I~
0: setupadmin
:es la PolyBase ? sysadn1in
Always On High Availabilit-;
1entru
!T. Se

Sistemul SQL Server sustine urmatoarele grupuri de roluri:


uolei • sysadmin - realizeaza orice actiune in SQL Server.
• setupadmin - gestioneaza serverele legate ~i procedurile de initiere.
ole la • serveradmin - stabile~te optiunile de configurare ~i poate deconecta serverul.
• securityadmin - gestioneaza loginurile ~i permisele de creare a bazelor de date, precum ~i
citirea fi~ierelor log a erorilor.
.race • processadmin -gestioneaza procesele care se executa in SQL Server.
• diskadmin - administreaza fi~ierele de pe disc.
lnstalarea ~i conjigurarea SQL Server

• dbcreator- creeaza ~i modifica baza de date.


• bulkadmin - rolul serverului fixat poate lansa instructiunea B ULK INSERT (inserarea masiva).
• public - fiecare utilizator al unei baze de date apaqine rolului public. Daca pentru un login nu
au fost definite implicit drepturile de acces la un obiect, el mo~tene~te drepturile rolului public
asupra acestui obiect.
Atunci cand este creat un login nou, trebuie sa fie examinat faptul daca utilizatorul va fl inserat in
unul din acele grupuri descrise mai sus. Pentru aceasta, se procedeaza in felul urmator:
1. Se da un click cu butonul drept al mouse-ului pe loginul lnregistrat
2. in meniul de context, se actioneazii optiunea Properties.
3. in fereastra deschisii, se selecteaza pagina Sever Roles. in consecintii, apare urmatoarea figura:
4. Se marcheaza grupul in care va fl inclus utilizatorul, apoi, selectarea este confinnata cu un
click pe butonul OK.

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

¥'f View connection properties

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

Aceasta sarcina, de asemenea, este u~or realizabila:


va). 1. Se face un click cu butonul drept al mouse-ului pe loginul recent creat.
in nu 2. in meniul de context, se actioneaza optiunea Properties.
ublic 3. in fereastra aparutii, se selecteaza pagina User Mapping. Ca urmare, se obtine fereastra de mai
jos:
rat in
Login Properties; - Ion
Select ii page
!J Script T ~ Help
/I General
JI Server Roles
/I User Mapping Users mappeg to this login :
1gura: /I Securables Map Database User Default Schema
JI Status
~ Adventurel/i/orks2017 Ion
cu un
D master
D model
[] msdb
[J lempdb

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

Tabelul de mai sus contine urmatoarele campuri:


• Map - setarea permisiunii de acces la baza de date respectiva pentru loginul dat.
• Database - enumerarea tuturor bazelor de date disponibile pe server.
• User - se specifica asocierea utilizatorului bazei de date cu loginul. Implicit, utilizatorul
bazei de date are acelaJ?i nume ca ~i loginul.
• Default Schema - se specifica schema implicita a utilizatorului. in cazul de fatii, au fast
definite roluri ~i scheme implicite la loginul Ion pentru baze de date Sample -
;el
Adventure Works2017.
4. Selectarile necesare sunt confirmate cu un click pe butonul OK.
in exemplul prezentat mai sus, utilizatorul cu loginul Ion este definit la nivel de server, msa la nivel
tbilire de baza de date sunt utilizate definitia schemei ~i rolurile de acces la schema. in exemplul cu baza de date
tccesa AdventureWorks2017, exista un set de tabele cu informatie despre angajati. E comod sa se aloce aceste
tabele la o schema (in cazul dat HumanResources) ~i sa se deschida accesul la aceasta schema (grup de
tabele) numai pentru anumiti utilizatori. Crearea schemelor va fi analizata in sectiunile ulterioare.
ml de
multe intrebiri de control:
ca un
1. Avantajele utilizarii tehnologiilor client-server in gestiunea bazelor de date.
2. Resursele minimale hardware necesare pentru lucrul cu SQL Server 2017.
lnstalarea fi conjigurarea SQL Server

3. Componentele logice ale sistemului SQL Server.


4. Formele de autentificare in SQL Server 2017.
5. Roluri de utilizatori de server in SQL Server 2017, utilitatea, importanta.
6. Scheme in SQL Server 2017, utilitatea, importanta.

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

2. CREAREA $1 iNTRETINEREA BAZEi DE DATE


Capitolul cuprinde o caracterizare ~i problemele privind crearea bazelor de date, a planurilor de
intrefinere ~i gestiunea proprietafilor acestora, utiliziind instrumentele SQL Server Management Studio.
in afara de aceasta, sunt tratate subiectele referitoare la organizarea rezonabila ~i mentenanfa bazelor de
date [6, 7].
0 baza de date in Microsoft SQL Server la nivel logic reprezinta o colecfie de tabele care confin
date ~i alte elemente structurale definite pentru a menfine activitafile de gestiune a acestor date.
Pentru a crea o baza de date, trebuie sa se cunoasca arhitectura fizica a bazei de date, mai intai
numele bazei de date, dimensiunea ~i fi~ierele sau grupurile de fi~iere care vor fi folosite pentru stocarea
datelor pe disc, proprietafile fi~ierelor. Organizarea eficienta a bazei de date la nivel fizic determina, in
mare masura, performanfa sistemului de calcul.

2.1. Fifierele gestionate de SQL Server 2017


SQL Server 2017 pentru fiecare baza de date creeaza unset de fi~iere. Datele ~i informafia log sunt
stocate in fi~iere diferite ~i fi~ierele individuale sunt utilizate de o bll2:a de date. Grupurile de fi~iere
(filegroups) sunt denumite colecfii de fi~iere ~i sunt utilizate pentru a ajuta la amplasarea datelor ~i
sarcinilor de gestionare, cum ar fi operafiile backup ~i restabilirea bazei de date.
Fiecare baza de date SQL Server 2017 are, eel pufin, doua fi~iere: fi~ierul-date ~i fi~ierul log.
Fi~ierul-date confine date ~i obiecte, precum tabele, indec~i, proceduri stocate ~i viziuni. Fi~ierele-date pot
fi grupate impreuna in grupuri de fi~iere cu scopuri de alocare ~i administrare. Fi~ierul log confine datele
necesare pentru executarea tuturor tranzacfiilor asupra bazei de date. Acest tip de fi~ier se mai nume~te
Jurnal de tranzacfii (Transaction Log).
Bazele de date SQL Server 2017 pot confine trei tipuri de fi~iere, precum urmeaza:
Primar
Fi~ierulprimar de date confinea date pentru stantarea bazei de date ~i indica catre alte fi~iere in baza
de date. Datele utilizatorului ~i obiectele pot fi pastrate in acest fi~ier sau in fi~ierul de date
secundar. Fiecare baza de date are un singur fi~ier-date primar. Pentru acest tip de fi~iere se
recomanda extensia .mdf
Secundar
Fi~ierul-date secundar este optional, este definit de utilizator ~i pastreaza date. Fi~ierele secundare
pot fi utilizate pentru a raspandi datele pe mai multe discuri plasand fiecare fi~ier pe unitate diferita
de disc sau masiv de discuri diferit. Aditional, daca baza de date excede marimea maximala pentru
un singur fi~ier Windows, poate fi utilizat fi~ierul-date secundar, astfel baza de date avand
posibilitatea sa creasca. Pentru acest tip de fi~iere, se recomanda extensia .ndf.
Log
Fi~ierul log continea date folosite pentru restabilirea bazei de date. Trebuie sa existe, eel pufin, cate
un fi~ier log pentru fiecare baza de date. Pentru acest tip de fi~iere, se recomanda extensia .ldf
Principala unitate de pastrare a datelor in SQL Server 201 7 este pagina. Spafiul de disc alocat pentru
fi~ierul-date(.mdf sau .ndf) In baza de date este divizat logic in pagini numerotate consecutiv de la 0 la n.
Operafiile de intrare/ie~ire pe disc se realizeaza la nivel de pagini. Adica SQL Server cite~te ~i scrie pagini
lntregi de date.
Prima pagina a fiecarui fi~ier este pagina-antet ce continea date despre atributele acestuia.
Urmatoarele cateva pagini, de asemenea, contin date de sistem, ca, de exemplu, schemele de alocare. Una
din paginile sistemului, stocata atat in fi~ierul primar, cat ~i in primul fi~ier-log este pagina boot a bazei de
date ce continea date despre atributele acesteia.
Crearea §i intre/inerea bazei de <late

Primary Data File: File ID 01

Sei;ondary Data File: File ID 02

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

Extents reprezinta o consecutivitate de 8 pagini ~i este utilizata pentru gestiunea eficienta a


paginilor. Toate paginile sunt pastrate in extenturi. Cele 8 pagini ocupa 64 Kb, prin urmare baza de date
SQL Server are cate 16 extenturi per lMb.
Pentru a optimizarea spatiului alocat, SQL Server nu aloca extenturi lntregi pentru tabelele cu un
volum de date mic. SQL Server are 2 tipuri de extenturi:
• Extenturi uniforme - apartin unui singur obiect, toate cele 8 pagini pot fi utilizate doar de
obiectul proprietar.
• Extenturi mixte - pot fi partajate de pana la 8 obiecte. Fiecare din aceste 8 pagini din extent pot
avea proprietari diferiti.
Gestiunea paginilor ~i extenturilor dep~e~te limitele lucrarii prezente [39].

2. 2. Crearea bazei de date

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.

c·.; Object Explorer Details - Microsoft SQL Server Management Studio


file E_dit Y:iew P.roject Qebug lool.s }'Yindow .!:[elp
c.
Object Explorer

LOCALDEV01 ( ~L Serve.r 14.0.1 000.169 - sa)


l£! Databases
Security Name Policy Healt
date i}J Server Objects Database>
ntru Replication Securit;
ipul PolyBa,;,e Server Objects
Always On High Availability Replication
Management PolyBas;e
>elul rt Integration Services Catalog.s Always On High Availability
1} 1 7"g 5QL Server Agent
lte o lvlanagement
•.t El XEvent Profi Ier Integration Services Catala .. .
;e~te
ia. z'l! SQL Server Agent
El XEvent Profiler

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

2.2.2. Afifarea fi modificarea proprietatilor bazei de date (General)


7. in casuta de editare Database name de pe pagina General, se introduce numele bazei de date.
Automat, sunt create fi~ierul de date primar ~i fi~ierul Log cu numele specificat mcalitate de
sufix. Aceste obiecte pot fi vizionate In tabelul Database Files.
8 Pentru crearea bazei de date, care accepta toate valorile implicite, este suficient sa se insereze
· numele ei ~i sa se faca un click pe butonul OK, In caz contrar, se continua cu urmatoarele
activitati optionale.
Astfel, bazei create ii pot fi definite proprietati speciale:
9. Pentru a activa cautarea m text in baza de date, se bifeaza caseta Use full-text indexing.
Aceasta optiune permite indexarea rapida ~i flexibila a textului pastrat in baza de date
gestionata de sistemul Microsoft SQL Server, indexare necesara pentru interogiirile orientate
pe cuvinte-cheie.
Spre deosebire de predicatul LIKE, care opereaza numai cu modele de secvente de caractere,
interogiirile asupra textului (full-text queries) executa cautari de caracter lingvistic, operand
asupra cuvintelor ~i frazelor construite intr-o limba concreta.

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
,. .......................... , ,,, , , , ,,.,

ROWS ... PRIM.A.RY 8',' 64 MB , Unlimlted


'"""""""'""''''"'''""•••"·'

_log LOG Not Applicable 8 8'/ 64 MB . Unlimlted

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

ereze Flle Growth


>arele In fercent
... .-
i!,.;
-
·~

·! • In Megabytes
Maximum File Size
~xing.
date (~;. jJmlted to {MB}
~ntate
11.nlimited

.ctere, OK Cancel
_J
1erand ! - _

Trebuie mentionat faptul ca cre~terea poate fi specificata in procente sau in megabytes,


in functie de necesitatile proprii. Pentru aceasta, se apasa butonul la capatul drept al
campului respectiv ~i se marcheaza optiunea respectiva in fereastra aparuta. in cazul in
care se dore~te specificarea marimii maxime, este marcata optiunea Limited to (MB) , iar
in casuta de editare de alaturi se indica dimensiunea maxima in Megabytes.
Tot aici, se poate deconecta proprietatea de cre~tere a fi~ierului debiiand butonul Enable
Autogrouwth. Dupa configurarea acestor optiuni, se da un click pe Ok.
• in ciimpul Path, se indica alocarea fi~ierelor.
• in ciimpul File Name, se indica numele fizic al fi~ierului. Numele fizic trebuie sa
corespunda regulilor respective pentru denumirile fi~ierelor in mediul sistemului de
operare dat. Daca campul File Name nu este populat, sistemul, In mod automat, atribuie
numele logic al fi~ierului in calitate de nume fizic, cu conditia ca acesta corespunde
constriingerii sus-numite.
• Numarul de fi~iere ale bazei de date poate fi modificat apasiind butoanele Add sau
Remove.
Orice baza de date are un grup primar de fi~iere (primary filegroup ). Acest grup continea
fi~ierul primar de date ~i unele fi~iere secundare care nu au fost plasate in alte grupuri de
fi~iere. Grupurile de fi~iere definite de utilizator (user-defined filegroups) pot ft create
pentru a grupa fi~iere de date impreuna cu scopuri de gestionare, de alocare a datelor ~i
amplasare.
De exemplu, fie trei fi~iere Universitatea_File2.ndf, Universitatea_File3.ndf, ~i
Universitatea_File4.ndf, pot fi create pe 3 unitati de discuri respectiv ~i grupate in grupul de
fi~iere userdatafgroupOJ . Un tabel deci poate ft creat anume in grupul userdatafgroupOJ.
files se Interogarea datelor din tabelul respectiv se va extinde pe cele 3 unitati de discuri, fapt ce va
imbunatati performanpi. Aceea~i imbunatatire a performantei poate fi atinsa cu ~i un singur
1nstituie fi~ier creat folosind tehnologiile RAID (redundant array of independent disks). in schimb,
trebuie fi~ierele ~i grupurile de fi~iere permit adaugarea simpla de noi fi~iere pe discuri noi.
Utilizarea mai multor grupuri de fi~iere ofera o flexibilitate ~i performanta sporita ~i la
restabilirea datelor, deoarece, in paralel, pot rula operatiuni de scriere in fi~ierele amplasate
pe diferite unitati de discuri, iar fiecare fi~ier poate fi restabilit individual.
:Jazei de Gruparea fi~ierelor se realizeaza executiind un click-drept in coloana File Group a fi~ierului
10% in respectiv. Ca rezultat, apare un meniu de context, in care se alege optiunea <new filegroup>
~i se lanseaza o fereastra ca in figura de mai jos:
Crearea # fntre/inerea bazei de date

~General
1' Options
.I- Filegroups Database name: univers-ttatea

Owner: <default >

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.

2.2.3. Consultarea :;i modificarea proprietatilor bazei de date {Options)


Urmiitoarea pagina Options determina caracteristicile bazei de date ce pot fi setate. Aceste
optiuni sunt unice pentru fiecare bazii de date ~i nu le afecteazii pe celelalte. Optiunile sunt
setate cu valori implicite la crearea unei baze de date noi.
Mai jos sunt prezentate optiunile ~i valorile lor implicite ce pot fi setate la crearea unei baze
de date.
• Collation - specifica colationarea bazei de date, selectand valoarea respectiva din listii.
• Recovery model - specificii unul din urmatoarele modele de recuperare a bazei de date:
Full, Bulk-Logged, sau Simple.
• Compatibility level - indica versiunea cea mai recenta a sistemului SQL Server ce
sustine baza de date. Valori posibile: SQL Server 2008, SQL Server 2012, SQL Server
2014, SQL Server 2016 sau SQL Server 2017.
I Iii
Select a Pil!IC
/.' General
I- Options
!J Scfipt ... Help
New Database -0--
Crearea # intrefinerea bazei de date

J; Rlegroups Collation : <default > v

Recover,' model: Full


- "
Compatibility level : SQL Ser{er 2017 {140)
Containment ttpe: SQ L Server 2008 {100)
SQ L Server 2012 {110}
SOL Server 201.! (120}
Other options :
.-
" -
A I
l +
I SOL Server 201
I'.;":
..,,
6,,,.,!1""'
,....,,, "'"''
-·•--------------1
30""')

Legacy Cardinality Estimation OFF


PRIMARY

In continuare, sunt enumerate unele optiuni aditionale mai des utilizate sau care prezinta un
interes deosebit [18] .

Automatic - este un grup de optiuni care determina comportamentul bazei de date in ce


prive~te disponibilitatea bazei, intretinerea automata a statisticilor ~i fWerelor.

• 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 >

Recover]' model : FuH

Compatibility [eve! : SQL Server 2ll17 {140)

Containment type : None

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.

Filestream - optiuni la nivelul bazei de date pentru functionalitatea Filestream.

Miscellaneous - o lista lunga de serii de optiuni care definesc izolarea tranzactiilor,


procesarea datelor ANSI, procesare cazurilor NULL, procesarea datelor numerice 'in unele
cazuri de eroare etc ..
Crearea # fntreJinerea bazei de date

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.

2.2.4. Afi:Jarea fi adaugarea grupurilor de fifiere


e optiuni Ultima pagina Filegroups - se utilizeazli pentru vizualizarea grupurilor de fi~iere sau
1nstruirea adaugarea grupurilor noi in baza de date selectata. Este alcatuita din 2 panele editabile, Rows
~i Filestream.

~nte ale Pane Jul Rows cuprinde urmatoarele functionalitati:


• Name - introduce numele grupului nou de fi~iere.
ralidarea • Files - afi~eaza numarul de fi~iere in grupul de fi~iere.
Daca se • Read-only- grupului de fi~iere i se ofera doar statutul de citire.
validata • Default - grupul de fi~iere este declarat grup de fi~iere implicit.
indicatli
;ul cand • Butonul Add - adaugli, pentru baza de date curentli, un rand nou la tabelul grupurilor de
fi~iere.
arele cu
• Butonul Remove - ~terge randurile selectate de grupuri de fi~iere din tabel.
atribuie
ar, este

actiilor,
n unele
-Cl-
Crearea # intrefinerea bazei de date

New Database
- ··--,.....,
~··-·

Select a page
.CT Script " Help
JI General
}I Options
> 'f~**''i\ Rows

Name Files Read-Only Default


PRIMARY 1 LJ
userdatafroup01 2 [] [;?]

Add F~egroup 'I_; ... ~~

FILE STREAM
Name FILESTREA... Read-Only Default

Connection
Server:
MV
.i\dd Rlegroup
Connection :
sa MEMORY OPTIMIZED DATA

¥¥ View connection properties Name FI LESTREAM Files

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"

Object Explorer db_studenti.sq! - MV .master (sa (54))


Co nnecty ¥ "¥ Back r.

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

•¥_ _ _ _ _ _ _ _ _ --- - - - - - - - - -

Obje<! i;,plom - If X Disk Usa ge · 1/2/201810:22 PM· MV .. X


Connect• f "f G~
MV 1SQL Server 14.0.1000.169 - sa)
Databases Disk Usage
System Databases
[universitatea]
Database Snap~hcts
-1 lj AdventureWorks2017 on MVat 1/2/20 18 10:22:29 PM
:f ii umverntate:a
Security This report prov;des overview of the uti~zal!on of disk space within the Database
Ser..-er Objects
Repl1cat1on Total Space ReserYed 144.00 MB
PolyBase Data Ales Space flesenred 80.00MB
Always On High Avai lability Tranoaction log Space AeoeoYed 64.WMB
Management
Integration Se.ivices Cata logs
Data Files Space Usage (%) Traosac!ioo Ing Space Usage ("·l
1 :1.'a SOL Server Agent
f; EJ X.Event Profiler
99.2
%.% 1.13 md~x 1
ur.alJocated Used
O.EJ
-a~ta Unused
128 or: used D.S

No entry found for autogrowrllutoshnnk: event for uruveBrlatea database in the trace log.

Ill Disk Space u.ed by Dala Ries

2.3. Baze de date de sistem


SGBD-ul SQL Server 2017 include urmatoarele haze de date de sistem:
master
in baza de date master, se inregistreaza toata infonnatia la nivel de sistem a SQL Server. Aceasta
t obiecte include instante de metadate, ca, de exemplu,: conturile de login, puncte de retea, servere
interconectate ~i setarile configuratiei sistemului. Baza de date master mai contine date despre
5estiunea existenta tuturor celorlalte haze de date ~i despre locatiile fi~ierelor acestora. in plus, master
i~iere din pastreaza ~i infonnatia de initiere a sistemului SQL Server, ceea ce inseamna ca sistemul nu poate
starta, daca haza de date nu este disponihila.
ms db
Este utilizata de SQL Server Agent pentru pastrarea datelor referitoare la avertizari, planuri de
lucru, servicii etc. Tot aici se pastreaza ~i alte date de serviciu ca, de exemplu, despre copierile de
rezerva.
model
Utilizata in calitate de model pentru toate hazele de date create in SQL Server. Modificarile tacute
pentru baza de date model ca: dimensiunea, colationarea, modelul de restahilire ~i alte optiuni vor fi
aplicate asupra tuturor bazelor de date create ulterior.
Resource
Este o haza de date numai pentru citire ~i contine ohiectele sistemului incluse in SQL Server 2017.
Ohiectele sistemului persista fizic in baza de date Resources, dar, logic, acestea apar In schema sys
a fiecarei haze de date. Acesta haza de date nu este vizibila in interfata sistemului.
temp db
Baza de date de sistem tempdb este o sursa glohala accesihila tuturor utilizatorilor conectati la
instanta SQL Server ~i contine toate tahelele temporare ~i procedurile stocate temporare. De
tza de date
asemenea, acopera ~i toate necesitatile unui spatiu temporar de stocare a tabelelor de lucru generate
;e Reports,
de SQL Server.
·ezultat, au
or bazei de
Crearea # fntrefinerea bazei de date

2.4. Crearea planului de intrefinere


Planurile de intretinere pot fi folosite la derularea sarcinilor necesare pentru mentinerea unei
functionari bune a bazei de date, pentru crearea copiilor de rezerva in caz de erori de sistem ~i pentru
verificarea consistentei bazei de date. Cu toate ca, pentru crearea planului de intretinere, poate fi folosit
asistentul respectiv (Maintenance Plan Wizard), crearea manuala a acestuia ofera o flexibilitate mai mare.
in SGBD-ul SQL Server 2017, planul de intretinere este un program care executa sarcinile de mentenanta
a bazei de date in intervale de timp conform acestuia.
Pentru crearea ~i gestiunea sarcinilor de mentinere, utilizatorul trebuie sa fie membru al rolului
sysadmin.
Exista doua cai de creare a planului de intretinere: folosind asistentul de creare a planului sau
folosind suprafata de proiectare. Asistentul este mai bun pentru crearea unui plan de intretinere, care ar
servi drept baza, in timp ce folosirea suprafetei de proiectare permite utilizatorului sa deruleze operatiile
de dezvoltare a planului.

2.4.1. Crearea planului de intrefinere cu ajutorul asistentului


Mai intai, se va examina procesul de creare a planului cu ajutorul asistentului. Pentru aceasta:
1. Se expandeaza serverul
2. Se expandeaza dosarul Management
3. Se face un click pe butonul drept al mouse-ului asupra dosarului Maintenance plan
4. Se selecteaza optiunea Maintenance plan wizard

Maintenance Pl an Wizard - L] . .

SQL Server Maintenance Ptan


Wizard

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 .

0 Qo not show this starting page again .

!: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

6. in fereastra Select Plan Propreties, se specifica modul de planificare a sarcinilor de


intretinere. in campul Name, se specifica numele planului de intretinere. in campul
Decription, se pot adauga comentariile referitoare la planul dat. Campul Run as indica
contul din numele caruia va fi rulat planul de intretinerea. Implicit, acesta este SQL Server
Agent service account. Mai jos, sunt plasate doua radiobutoane: Separate schedules for
each task ~i Single schedule for the entre plan or no schedule. Implicit este activ al doilea
buton ~i planul de intretinere se executa la cerere.
Pentru definirea sau modificarea orarului de executare a planului de intretinere, se apasa
butonul Change. in consecinta, se deschide o fereastra noua, unde, bif'and radiobutoanele
respective, se poate programa orarul dezirabil de executare.
in cazul dat, se insereaza numele MaintenancePlan_ Universitatea ~i acest plan este
programat sa ruleze in fiecare duminica la ora 12:00 de noapte.

Maintenance Plan Wizard


Select Plan Properties
How do you want to schedule your maintenance tasks?

Name : MaintenancePlan_universttatea

Q.esaiption :

Bun as : SQL SeNer Aflent ser~ice account

Separate schedules for each task


ii : Single schedule for the entire plan or no schedule

Schedule :
Occurs ever1 week on Sunday at 12:00:00 AM. Schedule will be used starting or Q-iange .

J:ielp < ftack Cancel

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

~elect one or more maintenance task$:


-~;J1a~i1:·i~~; ---- -----------------------------·-------------·----·-·------------
Shlink Database
Ih Reorqanize Index
IF Reb,_;jld Index
In Update Statistics
CJ
I Oean Up History
Ir····i Execute SQL Server ~ent Job
Li
I Back Up Database (Full)
,[J Back Up Database (Differential)
'[J Back Up Database (Transaction Log)
I[J Maintenance Oeanup Task

-!J The Check Database Integrity task perfonns internal consistency checks of the data and index pages
wrthin the database . fI

J:ielp < ~ack !:!ext > _::_J


8. in fereastra Select Maintenance Task Order, se poate alege ordinea de executare a
sarcinilor ce constituie planul de intretinere, mi~cand- le una fata de alta cu ajutorul
butoanelor Move Up ~i Move Down. Deoarece la etapa precedenta a fast selectata doar o
singura sarcina (Check Database Integrity), aceasta optiune nu are relevanta in cazul dat.

_t:] . .
Maintenance Plan Wizard
Select M11inten11nce Task Order
In which order should these tasks be perfom1ed?

~elect the order for the tasks to execute:

.!,; The Check Database Integrity task perfonns uitemal consistency checks of the data and index pages
wrthin the database.

!::\elp Cancel

In continuare, numarul pa~ilor (ferestrelor) de configurare ~i consecutivitatea aparitiei


acestora va depinde de numarul de sarcini bifate la etapele Select Maintenance Tasks ~i
Select Maintenance Task Order, respectiv.
9. in fereastra Define Database Check Integrity Task, pot fi indicate bazele de date care var fi
intretinute automat de asistent. Executand un click pe sageata in meniul Databases, apare o
fereastra in care poate fi aleasa ~i marcata una din optiunile ce urmeaza:
Crearea §i intrefinerea bazei de date

Maintenance Plan Wizard - D

Define Database Check Integrity Task


Configure the maintenance task .

Databases: J <:Select one or more;


,,,,.,,,.,.,,., ..........,.,_,,,,,,,,, . . ...,_.,_,.,,,.,.,!

All databases

" ,S)•stem databases

, .AJI Y.Serdatabases {excluding master, model. msdb,


-- tempdb)

~ ' ]1ese databases:

Help --' :ancel

c~; !gnore databases 'A'here the state is not online

OK Cancel

• toate bazele de date;


• numai bazele de date ale sistemului;
• bazele de date create de utilizator;
• bazele de date selectate din lista.
in cazul dat, este selectata optiunea These database ~i este aleasa doar baza de date recent
creata, dupa care se aplica un click pe OK ~i in fereastra principala - Next.
10. La etapa Select Report Options, asistentul vrea sa cunoasca dad\ raportul planului de
intretinere trebuie sa fie plasat mtr-un dosar pe serverul care realizeaza mtretinerea sau trebuie
trimis pe e-mailul unui operator. Implicit este bifata optiunea de plasare a raportului intr-un
dosar (Write a report to a text file). in campul Folder location, se insereaza calea unde va fi
salvat fi~ierul-raport. Directia salvarii fi~ierului poate fi editata manual sau apasand butonul
Browse,LJ.

,,;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

Folder location: D:\SYSTEMDB\ MSSQL14.MSSQLSERVER\ MSSQL\ Log

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.

Maintenance Plan Wizard


Complete the Wizard
Venr/ the choices made in the wizard. and then click Finish.

Oick Rnish to perform the following actions:

Maintenance Plan Wizard


Create Maintenance Plan 'MaintenancePlan_universftatea
· Define Database Check Integrity Task
•·· Check Database integrity on
.... Databases : universrtatea
Include indexes
Physical only
.,, · Selected reporting options
Report ·11~1! be generated in fol der: D:\ SYSTEMD B\ MSSQL 14.MSSQLSERVER\ MSSQL\ Log

]::!elp ~ j!ack finish Cancel


•.•.•. ,~., ... !

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.

Maintenance Plan Wizard

Mointenance Plan WizHrd P r ogi-ess


Click Stop to interrupt the operation .

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.

Object Explorer Disk Usage - 1!212018 10:22 PM - MV


Connect· f >-if
MV (SQL Server 14.0.1000.1M - o;a) MV (SQL Server 14.0.W00.169 - sa)\ Manag•
+ Database>
Name ~
+: Security
+ Server Objects fl MaintrnancePlan_universitatea
£ Replication
i· PolyB a ~e
H Always On High Availability
:: Management
·.·• J~ Policy Management
:±. ~ Data Collection
!.+: ~ Reso urce Governor
1-t: El Extended Events

1+ : '\OI '\FrvFr I nn~

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

Object Explorer .. 11: X

MV (SQL Server 14.0.1000.159 - sa)


'''· Databases
+. Sec urity
.+ Server ObjEcts
:·! Replication
· t- PolyBaS"e-
+ Always On High Ava ilability
l\4anagemrnt
+ ..~ Policy Management
,:, ~ Data Co llection
+ l\;l Resource Governor
·i EJ Extended Events
Maintenance Plan;
fl MaintenancePlan_universitatea
+ SQL Server Logs
19'11 Database Mail
.fcl Distributed Transaction Coordinator
+ Legacy
+ Integration Services Catalogs
- ~~ SQL Server Agent
Job'
~ Iii! MaintenancePlan universitatea.Subplan 1
Iii! syspolicy_purge_h1rtory
,tj lnh Artivitv Mnnitnr
Crearea §i tntrefinerea bazei de date

2.4.2. Crearea manuala a planului de intrefinere


Planul de intretinere poate fi creat utilizand ~i regimul constructorului. Pentru aceasta:
1. Se expandeaza instanta SQL.
2. Se expandeaza dosarul Management.
3. Se face un click pe butonul drept al mausului asupra dosarului Maintenance Plans.
4. Se selecteaza optiunea New Maintenance plan ...
5. Apare o cutie de dialog, unde se scrie numele planului de lntretinere ce se creeaza.
Dupa ce se apasa butonul OK, in Management Studio se deschide o fila noua ce reprezinta
mediul constructorului de planuri de intretinere.
in stanga, se afla un camp de obiecte Toolbox, care contine obiectele corespunzatoare
sarcinilor care trebuie sa fie executate de planul de intretinere.
in partea dreapta se afla fila Maintenance Plan {Design], care reprezinta cfunpul principal de
lucru. in partea de sus a paginii se gase~te o hara de instrumente, iar sub hara de instrumente
se afla cfunpurile Name ~i Description, echivalente cu cele descrise masistent. Putin mai jos,
se afla un tabel unde sunt afi~ate toate subplanurile ce alcatuiesc planul de intretinere dat. Mai
jos de tabelul de subplanuri, se afla suprafata de proiectare.
Este important de mentionat cateva butoane de pe hara de instrumente: Add Suplan, Subplan
Properties, Manage Connections, Reporting and Logging.
• Butonul Add Subplan adauga un subplan nou. Proprietatile acestuia pot fi configurate in
cutia de dialog Subplan Properties, care apare dupa ce se apasa butonul respectiv. Cutia
de dialog Subplan Properties contine patru cfunpuri: Name, Description, Schedule ~i
RunAs sunt similare celor descrise anterior, pentru crearea planului de intretinere cu
ajutorul asistentului (pasul 6). Butonul _JJ, care se afla in dreapta cfunpului Schedule,
are functie analogica cu cea a butonului Change aplicat In asistentul de creare a planului
de intretinere.

•"'-'' 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

.• Notify Operator Task


Name ~:':::::IJ
it. Rebuild Index Task
th Re:crganiz.e. index Task
Description : Subplan_1
IE~ S.hrink Databa« Ta<k
ta Updat-= Statistic; Task
.,. General Schedule : Not scheduled {On Demand}

The.re are no usab!e centre is in this. group.


Drag an item ontc this text to add it to the Run as. SOL Server Agent service account
toolbox.

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.

2.4.3 Executarea planurilor de intrefinere


Planul de intretinere poate fi executat manual sau, cum a fost mentionat anterior, planurile pot fi
programate pentru executarea lor, in mod automat, de catre SQL Agent.
Pentru executarea planului de intretinere in mod manual, se parcurg urmatorii pa~i:
1. in dosarul Maintenance Plan, se face un click-drept pe planul ales.
2. in meniul de context aparut, se alege optiunea Execute.
Crearea # mtrefinerea bazei de date

'.! ,; LJ Ll..lCI IUCU L'•' t:"l IL::

'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 ...

c.i z'6 SQL Server Agent


1::. Jobs

8) syspolicy_purge_history
0"9 Job Activity Monitor
Start Job at Step ...
1f1 Alerts
Stop Job
ff.; Operator~

Ii. Proxies. Cirrint lnh rt s ~

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

6. Aici, se apasa butonul Close.


De mentionat ca, deoarece fiecare subplan din Planul de intrefinere poate fi programat In timp
separat, sistemul creeaza pentru fiecare subplan cate un Job aparte.
Verificarea rezultatelor executarii Planului de intrefinere poate fi vazuta in jurnalul Agent-
ului, cand pe Jobul in cauza, se face un click-drept ~i, din meniul de context, se alege optiunea
View History.

·- ~ SQL Ser: er Agent


- Job~-

Start Job at Step .. .


un: Stop Job
Operators.
C:i , Proxies Script Job as
:± Error Logs ,View Histor;
C+ El XEvent Profiler
Enab le

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

univere log file ;aummary: No filter applied


1J REfo:sh
.
l Filter ... ~ Search ... ';tcr 'I\ Delete. ..
Ll -
J Help

~Ma1ntenancePlan=univere Date ' Step ID Server Job Name Step NamE.


l±J ~ 1/2l2D1S 11 :48:34 PM
O syspol1C';_purge_hislof'/ MV Maintenance Plan universitatea2.Subolan
+ Q SQLServer.Agent El ei 1/2/2ll18 1H.: 44 PM MV Maintenance Plan universitatea2.Subplan
• 0 Database Mail ~ 1/ 2!2{)18 11:44:44 ... 1 MV MaintenanceP1an universitatea2.Subplan 1 Subplan_·
1

de
>
Stam
last Refresh

1/212018 11 :54:37 PM

Filter: None < >


Selected row Q.etails:
T View filter settings Message
Executed as user: NT Serv1ce\ SQLSERVE.RAGENT. Microsoft {R) SOL Server Exe.cute-Package Utility Version
PrO!J'!SS 14.0. 1000. 169for 54-bit Copyright {C) 201 7 Microsoft .All rights reserved. Started : 11:44:44 PM Progress 2018
-0Hl2 23:44 45.!l4 Source : (E45C4AFS4BE3-00C-A855-SE182BE738601 Executing query "DECLARE
../) Done (2 records}.
@Guid UNIQUEIDENTIFIER EXECUTE msdb sp ": HJ[)'/, complete End Progress Progress : 2018-()1-02
u 23:44:4537 Source: Check Database lrrtegrity Task EXecuting query "USE [universitatea] 51):~ complete 0
:

End Progress Progress: 2!l18-01-02 23:&& :46.09 Source: Check Database Integrity Task Executing querl

Qose

Pentru informatie mai detaliata, se analizeaza log-ul planului de intretinere.


Crearea # fntrefinerea bazei de date

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. CREAREA $1 MODIFICAREA TABELELOR iN SQL SERVER


MANAGEMENT STUDIO
Capitolul trateaza problemele cu privire la crearea tabelelor, definirea coloanelor ~i setarea
proprietatilor de baza ale acestora, setarea proprietatilor extinse ale coloanelor, stabilirea cheilor primare ~i
celorlalte constrangeri de integritate, precum ~i modificarea structurii unui tabel. Sunt examinate, de
asemenea, tipurile de date, constrangerile de integritate ~i regulile de modificare a structurii unui tabel
[6,7].
inainte de a trece la crearea tabelelor, se presupune ca a fost tacut un studiu minutios al datelor ce
trebuie stocate. Multi elaboratori amatori au obiceiul sa proiecteze baza de date atunci cand, deja, se
gase~te inauntrul modulului de creare a tabelelor, tara a face un studiu ~i o definire prealabila a datelor
necesare pentru construirea acestora. 0 astfel de atitudine, deseori, este insotita de un rise, in ceea ce
prive~te calitatea datelor.

SGBD-ul SQL Server are de-a face cu doua tipuri de tabele:


1. Temporare, create in memoria volatila.
2. Permanente, create ~i .salvate pe disc.
Fiecare tabel regular (nonwide) [48] creat de SQL Server poate avea eel mult 1024 de ciimpuri
(coloane). Fiecare camp (coloana) trebuie sa posede unele specificatii, cum sunt numele campului, tipul de
date pe care le va pastra acest camp. Unele informatii sunt optionale. De exemplu, valoarea implicita a
campului sau unele limitari ale valorii, cum este valoarea maxima etc.
Numarul de inregistrari pe care le poate avea un singur tabel este limitat de locul (volumul de
memorie) de pastrare a acestuia.
La fel ca ~i in alte SGBD-uri, in SQL Server, fiecare tabel are un nume ~i acest nume este unic,
precum au nume diferite ~i campurile unui tabel. De exemplu, in acel~i tabel, nu pot fi doua campuri
Tele/on. in asemenea caz, pot fi create doua campuri, de exemplu, Telefon_serviciu ~i Telefon_domic iliu.
Cu toate ca numele de tabele trebuie sa fie unice in limitele schemei bazei de date, pot fi create mai
multe tabele cu acel~i nume, daca pentru acestea se specifica diferite scheme. Pot fi create doua tabele
numite func/ionari fiecare ~i pentru prima se atribuie numele de schema angajati, iar pentru a doua -
cumularzi. Atunci cand se lucreaza cu unul din tabelele func/ionari, el poate fi distins dintre cele doua,
specificand numele schemei asociate.

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

3.1.1. Date numerice exacte


BIGINT
Pastreaza numere cuprinse intre -263 ~i 263 -1. Ocupa 8 octeti.
INT
Pastreaza numere cuprinse intre-2 31 (-2.147.483.648) ~i 23 1-1 (2.147.483.647). Ocupa 4 octeti.
SMALL INT
Pastreaza numere cuprinse intre-2' 5 (-32768) ~ i 2 15-1 (32767). Ocupa 2 octeti.
Crearea # modificarea tabelelor in SQL Server Management Studio

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.

3.1.2. Date numerice aproximative


FLOAT(N)
Pentru pastrarea numerelor inexacte, cu zecimale periodice. in acest caz, datele sunt aproximative In
acord cu procesorul sistemului. Parametrul N determina precizia numiirului. Pentru N de la 1 la 24,
precizia este de 7 cifre ~i ocupa 4 octeti. Pentru N de la 25 la 53, precizia este de 15 cifre ~i ocupa 8
octeti memorie. Precizia implicita este de N egal cu 53.
REAL
Corespunde tipului FLOAT(24)

3.1.3. Date secvente


, de caractere
CHAR(N)
Pentru secvente de caractere cu lungime fixa (pana la 8Ko )
VARCHAR[ ( N I MAX ) ]
Pentru secvente de caractere cu lungime variabila (pana la 8 Ko ).
MAX indica faptul ca marimea maxima de memorie utilizata este 2 31-1 octeti (2 Go). Dimensiunea de
stocare este lungimea reala a datelor introduse + 2 octeti.
TEXT
Pentru secvente de caractere non-Unicode cu lungime variabila mai mare de 8 Ko (de exemplu,
documente HTML), dar care nu dep~e~te valoarea 2 31-1 octeti (2147483647 caractere).

3.1.4. Date binare


BINARY (N)
Utilizat pentru pastrarea datelor binare cu lungime fixa (pana la 8 Ko )
VARBINARY [ ( N I MAX) ]
Utilizat pentru piistrarea numerelor hexazecimale cu lungime variabila (pana la 8 Ko )
MAX indica faptul ca marimea maxima de memorie utilizata este 231-1 octeti (2 Go). Dimensiunea de
stocare este lungimea reala a datelor introduse + 2 octeti
Crearea fi modificarea tabelelor in SQL Server Management Studio

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)

3.1.5. Tipuri de date datil/ora


DATE TIME
e Pastreaza date alfanumerice, care reprezinta data cuprinsa intre 0110111753 ~i 31112/9999, ~i timpul
L intre 00:00:00 ~i 23:59:59.997, inclusiv. Ocupa 8 octeti memorie. Precizie 3.33 milisecunde.
ta
DATETIME2
Reprezinta o extensie a tipului DATETIME, deoarece data cuprinde un interval mai larg ~i timpul este
redat cu o exactitate mai inalta. Sustine definirea preciziei de reprezentare a paqii fractionare de catre
utilizator.
Cuprinde valori intre 0110110001 00:00:00.0000000 ~i 31112/9999 23:59:59.9999999, inclusiv. Ocupa
6 octeti pentru partea fractionara mai mica de 3; 7 octeti pentru partea fractionara 4 sau 5. Celelalte
precizii necesita 8 octeti memorie. Precizia - 100 nanosecunde.

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).

3.1.8. Ordinea de precedenta


Odata cu definirea tipurilor de date pentru campuri (coloane), utilizatorul este fortat sa respecte tipul
specificat. Aceasta este constrangerea asupra atributului. De exemplu, literele nu vor fi acceptate pentru
campurile numerice.
Crearea li modijicarea tabelelor in SQL Server Management Studio

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:

1. USER-DEFINED DATA TYPES (cea mai inalta) 16. INT


2. SQL VARIANT 17. SMALLINT
oara. 3. XML 18. TINYINT
litate 4 DATETIMEOFFSET 19. BIT
5. DATETIME2 20. NTEXT
6. DATETIME 21. TEXT
7. SMALLDATETIME 22. IMAGE
o. Se 8 DATE 23. TIMESTAMP
:e se 9 TIME 24. UNIQUEIDENTIFIER
1onim 10. FLOAT 25. NVARCHAR
11. REAL 26. NCHAR
12. DECIMAL 27 . VARCHAR
13. MONEY 28. CHAR
> linie
14. SMALLMONEY 29. VARBINARY
15 . BIGINT 30. BINARY (cea mai joasa)

intr-o . • Precizia, scara ~i lungimea rezultatului depinde de precizia, scara ~i lungimea expresiilor de
intrare.

3.2. Constrangeri de integritate


nite de Pentru a face ca intrarile de date sa corespunda maximal celor dezirabile, sistemul SQL Server
rver ~i utilizeaza ~i alte tipuri de constrangeri de integritate, cum sunt cheile primare, valorile implicite pentru
le date campuri etc. Daca integritatea bazei de date nu este asigurata, adica daca nu sunt respectate constrangerile
ractere. de integritate, se spune ca baza de date este inconsistenta.
tenon-
Constrangerile au prioritate fata de declan~atoare (TRIGGERS), reguli ~i valori implicite
(DEFAULT). Exista cinci tipuri de constrangeri de integritate sustinute de SGBD-ul SQL Server - NOT
NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY ~i CHECK:

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

3.3. Crearea tabele/or


3.3.1. Un exemplu cu doua tabele
in calitate de primul exemplu, vor fi create 2 table: grupe ~i discipline.
Tabelul grupe contine date despre grupele universitare (Cod_ Grupa), identificator de sistem pentru
fiecare grupa Id_ Grupa, denumirea specialitatii pentru fiecare grupa - Specialitate ~i denumirea facultatii
cu campul Nume_Facultate.
Tabelul discipline contine lista de discipline, care sunt predate la universitate ~i este alcatuit din 3
coloane: ld_Disciplina - un identificator unic pentru fiecare disciplinii, campul Disciplina - denumirea
disciplinei ~i campul Nr_ore__plan_disciplina care indica numarul de ore preconizate conform planul de
studii pentru disciplina data.
Structura tabelului grupe este urmatoarea:
Camp Tip Lungimea Null Implicit
Id Gruoa SMALLINT nu
Cod Grupa CHAR 6 nu
Soecialitate VARCHAR 255
Nume Facultate VARCHAR 255

Structura tabelului discipline este urmatoarea:


Camp Tip Lungimea Null Implicit
Id Disciolina INT nu
Disciplina VARCHAR 255 nu
Nr ore olan disciolina SMALL INT
cc
Acum se va trece la crearea tabelelor. Pentru aceasta, se procedeaza in felul urmator:
1. in arborele de baze de date al SQL Server Management Studio, se face un click pe semnul +
al dosarului Databases. pt
2. Se selecteazii baza de date in care se vor crea tabelele ~i se face un click pe semnul + asupra
bazei de date alese. Se face un click cu butonul drept al mouse-ului asupra dosarului Tables.
3. in meniul de context, care apare, se selecteaza optiunea New Table ... ,
4. Dupa selectarea optiunii Table ... , in aria de lucru va apiirea urmatoarea fereastra (fila) a
constructorului de tabele:
Crearea $i modificarea tabelelor in SQL Server Management Studio

camp 1.;;. MV.universitatea - dbo.Table_ 1 - Microsoft SQL Server Management Studio p - 0 x


file !;dit Yiew Eroject Qebug Tobje Desig n er l oots l'{indow !:!elp
purile
C • t'3 • · & Iii Iii;! .'ill t,!ew Q uery .~ .f.1 ,?.! f.i1 .~ '
r, din
"cbiectExpl~;;---·--.-Jf X ' MV.uriwemtatea-dbo.Tabfe.J " X Obje<:!:ExplorerDetads • ~ x
ui noi Properties. y

iste in Connect · ¥ "+


T C. -"'- Column Name Data Type Allow Nulls [Tbij dbo.Table_1

~ LOCALDEvii"i (SQL s•.,;~;i4~o~ioc;:. i ~ <............................................................................. D ~~~ i'+


Databa5es
Syste:m Database.s:
s rnd.~tiiY!J
(Name) Table_1
Databa<e Snapshots
['"' ' .fr: l ' ~ !· '1:'.'ri··~ Jn•·· ·~r~•t a t>-';
bazei + ii Adventurev'lc rks2017 De5-criptio n
HECK. ~, ii univers.itatea
Schema db o
Database Diagrams
ta. De Tab les
Views
El Table Designer
abilind Col um n Properties irlent;ty Colu :nn
"t Extern al Resources
indc·... abl:::
Syn onyms
Prog rammabiHy lock E!icalation Table
·+ Service Broker 1±1 Regular Data Space u5erddtafro up01
Stora ge F.epiicoterl r :r:
Sec urity r-:c GU!D Cc!unw
Security Text/Image FilegrOL u!ierdatafroup01
Server Objects
Replicati on
PolyBa<e (Identity)

n pentru
acultatii

1it din 3 3.3.2. Definirea proprietafilor tabelului


mmirea
Dupa cum se vede din imaginea de mai sus, in afara de fila constructorului de tabele, in partea
anul de
dreapta, se afla fereastra Properties, unde pot fi definite proprietatile tabelului. Mai jos, sunt specificate
proprietatile care sunt editabile la nivel de tabel.
• Name: Se specifica numele tabelului.
• Description: Se adauga descrierea tabelului.
• Schema: Se alege schema din care face parte tabelul.
• Lock escalation: Se seteaza modul de tratare a blocarilor.
• Regular Data Space Specification: Se specifica grupurile de fi~iere din baza de date sau
partitiile din care face parte tabelul.
• Text\Image Filegroup: Se specifica grupurile de obiecte BLOB din care face parte tabelul.

3.3.3. Definirea coloanelor


Fila de proiectare a tabelului este divizata in doua paqi: panelul superior, in care se definesc
coloanele tabelului, ~i panelul inferior, in care se definesc proprietatile fiecarei coloane.
Pentru fiecare coloana a tabelului, se cere completarea unei linii de pe panelul superior al filei de
mu!+
proiectare a tabelului. Pentru fiecare coloana, se cere specificarea, eel putin, a urmatoarelor caracteristici:

!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

3.3.4. Proprietafile coloanelor


Pentru fiecare coloana defmita, pot fi modificate o serie de proprietati care apar pe panelul inferior
al filei de defmire a tabelului. Nu toate proprietatile pot fi modificate, deoarece unele depind de tipul de
date ales pentru coloana data [55].

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

L~;;. MV.universitatea - dbo.grupe* - v'J. MV.universitatea - dbo.grupe" -


file fdit Yiew £reject .Qebug T file: fdit ]'.ievv £reject Qebug T
tJ · . ~ lilliilril ..~ C· j tJ· · "' lillii"' ..~
!T "° ~ 'f'3 §LO mm iil -.
i : !T ~ "° ~ 'f'3 §! .n mm iil :; -
rupe• -P x MV.universitatea - dbo.grupe• -P x
Data Type Column Name Data Type
sm all int Id_Grupa m1allint
char(6) Cod_Grupa char(6)
5pecial itate varchar(255) 5pecia litate varchar(255)
Nume_Facultate varchar(255) Nume_Facultate varchar(255)

3.3. 6. Salvarea tabelului


indata ce tabelul este complet definit, el trebuie salvat. Pentru aceasta, este suficienta efectuarea
unui click pe butonul Save, Iii , de pe hara de instrumente. Daca numele tabelului nu a fast introdus in
fereastra Properties (sectiunea 3.3.1 a acestui capitol), in acest moment, va apiirea fereastra Choose
Name, unde va trebui inserat ~i apoi confirmat numele tabelului, aplicand un click pe butonul OK.

3.4. $tergerea, redenumirea fi actualizarea tabelelor

3.4.1. $tergerea tabelelor din baza de date


Cateodatii, este necesara ~tergerea unui tabel (de exemplu, daca se dore~te implementarea unui nou
proiect al bazei de date sau daca se dore~te eliberarea spafiului ocupat de baza de date). Trebuie sa se tina
cont ca, atunci cand se ~terge un tabel, definitia sa structuralii, datele, indec~ii full-text, constrangerile ~i
indec~ii sunt ~ter~i pentru totdeauna din baza de date, iar spafiul care era utilizat pentru stocarea tabelului
~i indec~ilor lui este oferit altar tabele.

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.

3.4.2. Redenumirea tabelelor


Procesul de redenumire a tabelelor, practic, este asemiinator celui anterior. Pentru a redenumi un
tabel, in meniul de context, se selecteazii opfiunea Rename, in loc de opfiunea Delete, dupa care se
insereazii numele nou al tabelului.
Crearea # nwdificarea tabelelor in SQL Server ,Management Studio

3.4.3. lntroducerea, editarea fi ffergerea date/or din tabe/e


Introducerea, editarea ~i ~tergerea datelor din tabele sunt operatii foarte simplu de realizat. Pentru a
avea accesul la aceste operatii, se face un click cu butonul drept al mouse-ului asupra tabelului in cauza ~i,
in meniul de context care apare, se selecteaza optiunea Edit Top 200 Rows.
Dupa selectarea respectivei optiuni, pe ecranul calculatorului apare tabelul cu continutul lui:

MV.univers:itatea - dbo.grupe ..P X Ob'ect Explorer Details


Id_ Grupa Cod_ Grupa Specialitate Nume_Fac ...

- 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

. nou in aceasta fereastra, pot fi introduse, modificate sau ~terse inregistrari:


· tina • Pentru introducerea inregistrarilor, se aplica un click in campul liberal coloanei Id_ Grupa ~i se
le ~i initiaza scrierea datelor in inregistrarea noua. Ajungand la sfiir~itul acestei inregistrari, in cazul
\ului nostru la coloanaNume_Facultate, dupa includerea valorii lui, se apasa butonul Tab, ~i automat
cursorul trece in prima coloana unei inregistrari noi.
'que • Pentru modificarea datelor unui camp al unei inregistrari, este suficient sa se aplice un click
e~te asupra acestui camp, dupa care se poate modifica continutul lui.
ilui • Pentru excluderea unei inregistrari, se face un click drept pe pointerul acesteia (incercuit cu
ro~u) ~i in meniul de context se alege Delete. Pe ecran, apare o fereastra de avertizare in care se
cere confirmarea operatiei de ~tergere.
rva
rer 3.5. Modificarea structurii unui tabel
Se poate intampla ca, dupa proiectarea structurii unui tabel, sa apara necesitatea includerii sau
excluderii unor campuri, deja, create. Aceste sarcini sunt simple in cazul cand tabelul in cauza nu este
completat cu date.
ul
:at Cu toate acestea, SQL Server permite sa se adauge tabelelor (cu date) existente coloane noi, daca
ta aceste coloane accepta valori nule sau sunt create constrangeri Default pe aceste coloane. Atunci cand
le lntr-un tabel se adauga o coloana noua, SQL Server insereaza o valoare in coloana pe fiecare inregistrare
existenta. De aceea, atunci cand coloana este adaugata unui tabel, este foarte bine sa se specifice pentru
·s coloana o constrangere Default. Daca coloana nouii nu are o definitie Default, trebuie sa se specifice ca
coloana acceptii valori nule. SQL Server va insera, in acest caz, in coloanii, valori NULL ~i va returna o
eroare, dacii coloana nouii nu accepta valori NULL.
Crearea # modijicarea tabelelor in SQL Server M(l11agement Studio

3.5.1. Modificarea proprietflfilor co/oanelor


Coloanele pot fi ~terse din tabelele existente sau pot fi modificate proprietatile coloanelor. insa,
exista cazuri speciale cand proprietatile coloanei nu pot fi modificate:
• Coloana este de tipul TIMESTAMP sau UNIQUEIDENTIFIER.
• Este o coloana calculata (computed) sau este utilizata de o coloana calculata.
• Este folosita intr-un index. Exceptie pot fi coloanele de tip VARCHAR, NVARCHAR sau
VARBINARY, daca tipul de date nu se schimba, ci se mare~te dimensiunea ~i indexul dat nu este
rezultatul constrangerii PRIMARY_ KEY.
• Coloana este utilizata de statisticile generate de instructiunea CREATE STATISTICS. Exceptie
pot fi coloanele de tip VARCHAR, NVARCHAR sau VARBINARY, daca tipul de date nu se
schimba, ci se mare~te dimensiunea acestuia sau coloana se schimba din NOT NULL 1n N ULL.
• Coloana este utilizata in PRIMARY KEY sau 1n constrangerea [FOREIGN KEY] REFERENCES.
• Coloana este utilizata in constrangerile CHECK sau UNIQUE. insa schimbarea lungimii
coloanelor utilizate in CHECK sau UNIQUE este posibila.
• Coloanele asociate cu clauza DEFAULT. Dar, totu~i, este posibila modificarea lungimii,
preciziei sau scalei coloanei, daca tipul de date nu este modificat.
• Daca tabelul ce contine coloana este partitionat, atunci schimbarea tipului de date al acestei
coloane nu este posibila.
Exista ~i unele constrangeri in ce prive~te modificarea coloanelor de tipul TEXT, NTEXT sau
IMAGE. Atunci cand se dore~te o modificare a tipurilor de date, trebuie sa se tina cont de faptul ca aceste
modificari pot duce la modificarea datelor. De exemplu, reducerea preciziei unei coloane poate duce la
trunchierea datelor continute.
Daca constrangerile sus-numite sunt respectate ~i tabelul nu contine date care pot fi pierdute In urma
operatiilor de modificare sau ~tergere a coloanelor, atunci modificarea, inserarea sau ~tergerea coloanelor
se realizeaza, precum urmeaza.

3.5.2. lnserarea unui camp nou


Pentru inserarea unui camp in structura unui tabel:
1. Se face un click cu butonul drept al mouse-ului asupra tabelului care trebuie sa posede un
camp nou.
2. in meniul de context, care s-a deschis, se actioneaza optiunea Design.
3. Se selecteaza coloana (campul), inainte careia trebuie sa fie plasata coloana noua, executand
un click cu butonul drept al mouse-ului.
4. in meniul de context, care s-a deschis, se selecteaza optiunea Insert Column.
5. Se completeaza proprietatile pentru coloana noua.
6. Se face un click pe butonul care reprezinta actiunea de salvare (Save) .
Tot aici pot fi editate coloanele deja existente, selectand cu un clic setarile ce trebuie supuse
schimbarii.

3.5.3. $tergerea unui camp existent


Pentru ~tergerea unui camp din structura unui tabel:
1. Se executa primii 2 p~i din procedura anterioara (de inserare).
2. Se face un click cu butonul drept al mouse-ului pe coloana care trebuie sa fie exclusa.
3. in meniul de context cares-a deschis, se actioneaza optiuneaDelete Column.
4. Se executa un click pe butonul Save de pe hara de instrumente.
Crearea ~i modijicarea tabelelor in SQL Server Management Studio

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)

cestei I Tabet Coll Col2 . Col3


I 1.0
2 1.0
Tsau
aceste Ce tip de date trebuie sa fie [Col3] pentru a pastra rezultatul urmatoarei expresii Coll *Col2.
Jee la 3. Creati o baza de date numita universitatea cu proprietati implicite. in cadrul acestei haze de
date, creati 2 tabele (grupe, discipline), scheme le carora sunt definite in sectiunea 3 .3 a
urma capitolului.
melor 4. Inserati in tabelele respective ale bazei de date universitatea urmatoarele inregistrari:

I discipline ld_Disciplina Disciplina N r _ore_plan_disciplina


100 Sisteme de operare 60
101 Programarea calculatoarelor 60
de un 102 Informatica aplicata 46
103 Sisteme de calcul 46
104 Asamblare si depanare PC 60
105 Cercetari operationale 76
:utand
106 Programarea WEB 46
107 Baze de date 60
108 Structuri de date si algoritmi 76
109 Retele informatice 46
110 Matematica discreta 60
111 Modelarea sistemelor 46
upuse 112 Limbaje evaluate de programare (Java,.NET) 76
I 13 Programarea aplicatiilor Windows 60
114 Tehnologii de procesare a informatiei 46
115 Programarea declarativa 46
116 Proiectarea sistemelor informatice 60
117 Practica de licenta 80
118 Practica de productie 80
119 lntegrare informationala europeana 20
120 Programe aplicative 46
Crearea # nwdificarea tabelelor in SQL Server Mtllltlgement Studio

I 2ruoe ld_Grupa Cod_Grupa Specialitate Nume Facultate


1 CIB171 Cibemetica Informatica si Cibemetica
2 INF171 Informatica Informatica si Cibemetica
3 TI171 Tehnologii Informationale Informatica si Cibemetica

Il
as
[2

co
as
lnstruc/iunea SELECT Transact-SQL

4. INSTRUCTIUNEA SELECT TRANSACT-SQL


Capitolul este consacrat studierii elementelor de baza ale limbajului Transact-SQL, a structurii
instructiunii SELECT ~i a tipurilor de functii utilizate in interogari. in afara de aceasta, se trateaza
aspectele de utilizare a interfetei Editorului de lnterogari pentru crearea ~i gestiunea interogarilor SQL
[2].
inainte de a trece la studierea limbajului SQL, se va examina sumar instrumentele grafice de
construire a interogarilor oferite de editorul de interogari al sistemului SQL Server. Aceste instrumente
asigura o serie de facilitati legate de recuperarea ~i optimizarea interogarilor. intre ele, pot fi citate:
• Vizualizarea datelor sub forma de text sau grid, utilizand, pentru aceasta, comenzile SQL.
• Analiza planului de executare a interogarii.
• Helpul on-line al limbajului Transact-SQL.

4.1. incarcarea Transact-SQL Query Editor


Pentru incarcarea Transact-SQL Query Editor, se executa µrmatoarele operatii:
1. Se lanseaza interfata Microsoft SQL Server Management Studio, se alege serverul respectiv
din lista de servere inregistrate.
2. in continuare, se face un click pe primul buton de pe bara de instrumente, New Query,
precum este prezentat in figura de mai jos (varianta 1). 0 alta cale este aplicarea unui click cu
butonul drept al mouse-ului asupra serverului respectiv ~i din meniul din context aparut se
alege optiunea New Query (varianta 2). Aceea~i optiune poate fi selectata, aplicand un click-
drept in cfunpul de lucru Management Studio (varianta 3) .

.,
L~i' Object Explorer Details - Microsoft SOL Server Management Studio
File Edit View Debug

ra . -"
Object Explorer

I()( Al f)FVfl1 {'>0 1 '>Prver 14.0. 1000.169 - ~a )

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

4.2. Funcfionalitafile componentei Transact-SQL Query Editor


Transact-SQL Query Editor reprezinta editorul de interogari scrise in limbajul Transact-SQL.
in primul rand, pe hara de instrumente, in casuta de dialog Available Databases (1), poate fi
selectata baza de date cu care se va lucra. in cazul de fata, se va selecta baza de date-test, numita
universitatea, care a fost creata in lucrarile precedente.
Daca este scrisa o instructiune SQL, executarea acestei instructiuni de catre sistem este solicitata
prin aplicarea unui click pe butonul de control (2) din imaginea de maijos sau prin apasarea tastei FS.

LJ SQLQuery2.sql - LOCALDEV01.un iversitatea (sa (53)) - Microsoft... )ui:k Uunch !Ctri.,.Q)

file £dit '{iew Query P.roject Qebug Iools Window !::!eJ p

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

e. ta . cl Iii ~ ; ..~ ~ew Query ..~ ~ fift [Hf. f.'r Mi OJ OJ '? T

.,.'j univers itatea l;>- E:t;ecute Qebug ·= ?=


..E

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

r' Execution plan

Query 1: Query cost ( re lative t o the batch) : 1 00%


SELECT Discipli:ia, Nr_ore_pla n_di sc ipl i na FROM discipline '«HE.RE Nr ore_plan_di:

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

_C~c~ed pla~ s,~e 24 KB


.Es!!.01~~d qper<i!!~~~~ost _ ~J2:~2
Estimated Subtree Cost 0.0147009
Estimated Number of Rows
Statement
SELECT Disciplina. Nr_ore_plan_dis.ciplina
FROM d iscipline
l/v'H ERE Nr _ore _o !a ~_disci p i;n a =60
ORDER BY Dis.i:iplina ASC

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.

4.3. Elemente de baza ale instructiunii


, SELECT
Urmatorul pas il constituie studierea limbajului de interogiiri. intotdeauna, cand vor aparea
probleme in sintaxa unei instructiuni, se poate apela la ajutorul componentei Help On Line. Pentru
aceasta, este suficient sa se selecteze in fereastra elementul instructiunii Transact-SQL ~i sa se actioneze
tasta Fl. in consecintii, in browser se va deschide fereastra necesara de pe sursa
https:l/docs.microsoft.com/, unde poate fi vizualizata documentatie de referinta.
Pana aici, activitatile au fost indreptate spre administrarea bazelor de date, crearea tabelelor etc. Dar
niciuna din aceste activitati nu are sens, daca nu se cunoa~te limbajul de interogari.
in acest capitol, vor fi studiate instructiunile principale ale limbajului, pentru a ne obi~nui cu
utilizarea limbajului SQL, apoi, pe parcurs, vor ft examinate aspecte mai aprofundate ale acestui subiect.
Mai intai, trebuie mentionat ca instructiunile SQL se impart in 4 grupuri principale: DDL, DML,
DCL ~i TCL. Care e deosebirea ~i pentru ce sunt folosite fiecare din ele? [20]
DDL (data definition language) este o parte a limbajului SQL, care este utilizatii pentru definirea
datelor ~i obiectelor unei haze de date. Atunci cand sunt utilizate instructiunile din acest grup, in
dictionarul de date al sistemului SQL Server sunt realizate intrarile respective. Cu ajutorul acestor
instructiuni pot fi create tabele ~i (sau) modificate tabelele specificate, inserate coloane (campuri) in
tabele, definite constrangeri de integritate, construiti indec~i etc.
DML (data manipulation language) este o parte a limbajului SQL, care este utilizata pentru
manipularea datelor, adica consultarea, inserarea liniilor (inregistrari) in tabele, excluderea liniilor ~i
modificarea liniilor.
DCL (data control language) este utilizat pentru crearea rolurilor, permisiunilor ~i integritati lor
referentiale. De asemenea, este utilizat pentru administrarea accesului la haze de date ~i la resursele
serverului.
TCL (Transactional Control Language), este utilizat pentru gestionarea tranzactiilor care au loc
intr-o baza de date.
in cadrul acestui volum mai detaliat vor fi analizate instructiunile DML ~i DDL.
4.3. 1. Operatori fi expresii uti/izate in interogari
Expresiile sunt elemente utilizate pentru definirea criteriilor de selectie, regulilor de validare sau
campurilor calculate, formate dintr-o combinatie de operatori, constante, variabile ~i functii ce au ca
rezultat o anumitii valoare. in constructia instructiunilor SQL, se obi~nuie~te sa se foloseasca diverse
expresii ~i operatori.
Doua expresii pot ft combinate cu un operator In cazul In care ambele au tipuri de date acceptate de
catre operator ~i indeplinesc eel putin una dintre aceste conditii:
• Expresiile au acela~i tip de date.
• Tipul de date cu prioritate mai mica pot fi convertite implicit la tipul de date de prioritate mai
mare.
• Functiile CAST ~i CONVERT pot converti, in mod explicit, tipul de date cu prioritate mai mica
la tipul de date cu prioritate mai mare sau un tip de date intermediar care poate ft transformat
implicit la tipul de date cu cea mai mare prioritate.
lnstruc/iunea SELECT Transact-SQL

gresul Operatorii utilizati in construirea expresiilor Transact-SQL se pot clasifica astfel:


1rse, ~i
mare a Operatori aritmetici Reprezentare Operatori de com para re Reprezentare
lmpfillirea I Diferit de <>
Modulul % Egal cu
~ave ~i >=
lmnultifea * Mai mare sau egal cu
Adunarea + Mai mare ca >
Sc!lderea Mai mic sau egal cu <=
Mai mic ca <
Operatori de caracter Reprezentare Nu e egal cu !=
aparea
Pentru
Concatenarea + Nu e mai mare ca !>
Nu e mai rnic ca !<
oneze
sursa
Operatori logici Reprezentare
c. Dar Adevfil"at, daca pentru orice element din multimea definita de expresie este adevarat ALL
Adevfil"at, in cazul cand operandul este din intervalul fixat BETWEEN
Adevfil"at, in cazul cand o subinterogare extrage eel putin un rand EXISTS
mi cu Adevfil"at, cand un element se gase~te intr-o multifile de elemente JN
ect. Adevfil"at, in cazul cand operandul gase~te un element ce se potrive~te cu un model LIKE
DML, Inverseaza valoarea booleana NOT
Adevfil"at, in cazul cand vreun element din multimea definita de expresie are SOME
valoarea adevarat.
inire a Adevfil"at, in cazul cand vreun element din multifilea definita de expresie are ANY
1p, in valoarea adevarat.
:estor Adevfil"at, daca ambele expresii in structura instrucpunii au valoarea adevarat AND
ri) in Adevfil"at daca eel pupn una din expresiile constante in structura comenzilor are OR
valoarea adevarat

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 /\

Operatorul LIKE, compara datele cu un model de tip caracter:


u loc
Caracter generic Descriere operator LIKE
Un singur caracter oarecare
-
% Orice secventa de zero sau mai multe caractere
[ab ... ] Un caracter din lista ab ...
[a-z] Un caracter din intervalul a-z
: sau [/\ab ... ] Un caracter din afara listei sau din afara intervalului specificat.
.u ca
rerse 4.3.2. lnterogari simple
Instructiunea SELECT reprezinta blocul de interogare de baza ~i ea selecteaza informatiile dorite din
te de tabelele bazei de date. Sintaxa acestei instructiuni este intotdeauna acee~i, este foarte putemica ~i are
urmatoarea forma generala:

SELECT [ALLIDISTINCT] <lista coloane>


mai FROM <lista tabele>
[WHERE <conditie cautare>] [<clauze_secundare>]
nica Astfel, o instructiune SELECT este formata din mai multe cuvinte-cheie numite clauze. SELECT se
mat define~te utilizand diverse configuratii ale acestor clauze in scopul obtinerii informatiei necesare. Unele
clauze sunt obligatorii, altele optionale. in plus, fiecare clauzii este formata dintr-unul sau mai multe
cuvinte-cheie utilizate la extragerea ca intreg a informatiei cerute prin enuntul SELECT.
Instruc/iunea SELECT Transact-SQL

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:

SELECT Disciplina, Nr_ore_plan_disciplina FROM discipline WHERE


Nr_ore_plan_disciplina = 60 ORDER BY Disciplina ASC;
Sa se analizeze rezultatul.
Se examineaza un exemplu. in Transact-SQL Query Editor, se tipare~te urmatoarea instructiune:

SELECT * FROM discipline;


Daca lista de campuri este un asterisc (*), atunci se selecteaza toate campurile tabelelor indicate
prin clauza FROM. Astfel, se cere selectarea tuturor campurilor tabelului discipline. Rezultatul, dupa
executarea instructiunii sub forma de grid, va fl urmatorul:

5QLQuery2.sql - LOC...ver!>itatea (sa (69))" .g X queries Lab04.sql -... ivers


SELECT FROM discip l ine
121 %

ml Results ~ Messages
Id _Disciplina Disciplina Nr_ore _plan_disciplina
100 Sisteme de operare 5{}

2 rn1 Programarea calculatoarelor fi{)


3 Hl2 Informatica aplicata .4£
A Hl3 Sisteme de calcul 4€
5 HlL. .Asamblare si depanare PC £{}

+: 1f\l'i r ;:.rr-P-t~ri r 1nPr.::rlinn:=.IP 7+:

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.

4.3.3. Limitarea numărului de linii returnate


În SQL Server 2017, clauza TOP permite extragerea unui număr sau un procent de linii returnate de
o interogare. Atunci când TOP se utilizează împreună cu clauza ORDER BY, mulțimea întoarsă este
mărginită la primele N linii ordonate; în caz contrar, sunt returnate primele N rânduri în ordine nedefinit.
Clauza TOP este disponibilă pentru instrucțiunile SELECT, INSERT, UPDATE, MERGE sau DELETE.

95
Acestea folosesc următoarea sintaxă:

…[ TOP <expresie> [PERCENT] [WITH TIES] ]…


<expresie>
Reprezintă numărul de linii returnate. Este reprezentată sub formă de întreg (BIGINT) sau în
procentaj de linii întoarse. Procentajul poate fi exprimat sub formă FLOAT.
[PERCENT]
Specifică faptul că numărul este reprezentat în procente.
[WITH TIES]
Selectarea liniilor se efectuează după trierea datelor de către clauza ORDER BY.
TOP...WITH TIES poate fi definită, în mod univoc, numai în instrucțiunea SELECT, și numai dacă
este menționată clauza ORDER BY. Ordinea returnării înregistrărilor legate sunt arbitrare (dacă câmpurile
sortate au duplicate). ORDER BY nu afectează această regulă.
Urmează un exemplu, care prezintă modul în care SQL Server limitează numărul de tupluri
returnate. Presupunem că dorim să extragem primele 3 înregistrări din tabelul discipline, sortate ascendent
conform interogării:

Î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.

SELECT DISTINCT p.Id_Profesor AS Id_Profesor_P,


r.Id_Profesor AS Id_Profesor_R,
p.Nume_Profesor, p.Prenume_Profesor,
r.Id_Disciplina, r.Id_Grupa
FROM profesori AS p, studenti_reusita AS r
WHERE p.Id_Profesor = r.Id_Profesor AND r.Id_Grupa = 1
ORDER BY Id_Profesor_P ASC;
Pentru JOIN, sistemul SQL Server oferă și o sintaxă specifică, introdusă de către standardul SQL3
(SQL:1999). Această sintaxă nu aduce beneficii în privința performanței față de joncțiunile care se aplică
în clauza WHERE, însă oferă o flexibilitate mai mare la programare bazelor de date. Tipurile de joncțiuni
conforme cu SQL3 sunt definite prin cuvintele cheie INNER JOIN, LEFT și RIGHT [OUTER] JOIN,
CROSS JOIN (pentru produs cartezian), și clauza ON.

4.4.1. Interogări cu joncțiuni interne


Joncțiunile interne, în mare măsură, corespund theta-joncțiunilor din algebra relațională. Joncțiunile
interne returnează liniile din tabelele asociate, care satisfac criteriile de asociere prin compararea valorilor
coloanelor respective din cele două tabele. Liniile care nu satisfac criteriile sunt eliminate.
Același exercițiu poate fi realizat, utilizând joncțiunea internă: INNER JOIN returnează toate
rândurile din ambele tabele, care coincid pe câmpurile de joncțiune, unde identificatorul grupei este egal
cu 1. Dacă sunt rânduri în profesori, care nu se potrivesc cu rândurile din studenti_reusita, acestea nu vor
figura în rezultat.

95
Instrucțiunea SELECT cu INNER JOIN are următoarea formă generală:

SELECT expresie1 [, expresie2 …]


FROM tabel_1 INNER JOIN tabel_2
[ON <condiții joncțiune>]
Condiția <condiții joncțiune> efectuează operații pe baza condiției exprimate în clauza ON.
Această clauză permite specificarea separată a condițiilor de join, respectiv a celor de căutare sau filtrare
(din clauza WHERE).

4.4.2. Interogări cu joncțiuni externe


Sintaxa corespunzătoare prezenta forma generală a joncțiunii externe:

SELECT expresie1 [, expresie2 …]


FROM tabel_1 {{LEFT|RIGHT|FULL} [OUTER]} JOIN tabel_2
[ON <condiții joncțiune>]
Ca și în joncțiunile interne, unde opțional se folosea cuvântul-cheie INNER, cuvântul OUTER de
asemenea este unul opțional și nu adaugă nici o funcție.
Pentru realizarea unei joncțiuni externe, în clauza FROM, se indică numele tabelelor separate de
operatorul OUTER JOIN, cu folosirea uneia din variantele LEFT, RIGHT sau FULL. Utilizarea clauzei
ON permite specificarea condițiilor de joncțiune separat de condițiile de căutare sau filtrare din clauza
WHERE.

4.4.2.1. Joncțiuni externe de stânga


Pentru construirea joncțiunii externă la stânga (LEFT OUTER JOIN), la început se realizează o
joncțiune internă. Apoi, fiecare rând din tabelul T1 (T1 stânga, T2 dreapta) care nu satisface joncțiunea cu
T2 este adăugat având valori NULL pentru câmpurile corespondente din T2. Tabelul rezultat va avea, cel
puțin rândurile din tabelul T1.
LEFT [OUTER] JOIN returnează toate rândurile din primul tabel (profesori), chiar dacă nu coincid
pe câmpurile de joncțiune cu vreun rând din al doilea tabel (studenti_reusita). Adică, dacă există așa
tupluri în tabelul profesori, care nu coincid pe câmpurile de joncțiune din tabelul studenti_reusita, acestea
sunt, de asemenea, afișate. Coloanele tabelului din dreapta se completează cu valori nule.

4.4.2.2. Joncțiuni externe de dreapta


Pentru construirea joncțiunii externă la dreapta (RIGHT OUTER JOIN). la început se realizează o
joncțiune internă. Apoi, fiecare rând din tabelul T2 (T1 stânga, T2 dreapta) care nu satisface joncțiunea cu
T1 este adăugat având valori NULL pentru câmpurile corespondente din T1. Tabelul rezultat va avea, cel
puțin rândurile din tabelul T2.
RIGHT [OUTER] JOIN returnează toate rândurile din al doilea tabel (studenti_reusita), chiar dacă
nu coincid pe câmpurile de joncțiune cu rânduri din primul tabel (profesori). Adică, dacă există asemenea

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.

4.4.2.3. Joncțiuni externe totale


Pentru construirea joncțiunii externă totale (FULL OUTER JOIN). la început se realizează o
joncțiune internă. Apoi, fiecare rând din tabelul T2 (T1 stânga, T2 dreapta) care nu satisface joncțiunea cu
T1 este adăugat având valori NULL pentru câmpurile corespondente din T1. Apoi, fiecare rând din T1
care nu satisface joncțiunea cu T2 este adăugat având valori NULL pentru câmpurile corespondente din
T2.
FULL [OUTER] JOIN returnează toate rândurile din al doilea tabel (studenti_reusita), chiar dacă
nu coincid pe câmpurile de joncțiune cu rânduri din primul tabel (profesori). Adică, dacă există asemenea
tupluri în tabelul studenti_reusita, care nu coincid pe câmpurile de joncțiune din tabelul profesori, acestea
sunt, de asemenea, afișate. Apoi returnează toate rândurile din primul tabel (profesori), chiar dacă nu
coincid pe câmpurile de joncțiune cu vreun rând din al doilea tabel (studenti_reusita). Adică, dacă există
așa tupluri în tabelul profesori, care nu coincid pe câmpurile de joncţiune din tabelul studenti_reusita,
acestea sunt, de asemenea, afișate. Coloanele tabelelor din stânga li din dreapta se completează cu valori
nule.

4.4.3. Produsul Cartezian


Cross join (sau joncțiunea încrucișată) este produsul Cartezian al tabelelor implicate. În acest fel,
pentru fiecare rând din primul tabel se adaugă fiecare rând din al doilea tabel. Rezultatul are lungimea
produsului numărului de linii din cele două tabele.
Sintaxa corespunzătoare prezenta forma generală a produsului Cartezian:

SELECT expresie1 [, expresie2 …]


FROM tabel_1 CROSS JOIN tabel_2
De exemplu, se returnează un tabel ce conține produsul Cartezian cu toate rândurile din tabelele
discipline și profesori, unde denumirea disciplinei se începe cu cuvântul 'Practica' și prenume

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.

4.4.4. Funcții pe un sigur rând


O funcție în limbajul Transact-SQL nu este altceva decât o rutină care realizează o operație anumită
și întoarce un rezultat. Funcțiile constituie o caracteristică importantă a limbajului și sunt utilizate pentru:
● a realiza calcule asupra datelor;
● a modifica date;
● a manipula grupuri de înregistrări;
● a schimba formatul datelor;
● sau pentru a converti diferite tipuri de date.

96
O funcție este constituită dintr-o serie de argumente, care sunt utilizate în procesare. Sintaxa de bază
este următoarea:

<nume funcție> (<argument1> [, <argument2> ...] )


Funcțiile se clasifică în două tipuri:
● Single row
● Group say multiple row
Diferența dintre cele două tipuri de funcții este numărul de înregistrări pe care acționează: funcțiile
referitoare la o singură înregistrare returnează un singur rezultat pentru fiecare rând al tabelului, pe când
funcțiile referitoare la mai multe înregistrări returnează un singur rezultat pentru fiecare grup de
înregistrări din tabel.
Funcțiile referitoare la o singură înregistrare sunt funcții utilizate pentru manipularea datelor
individuale. Ele pot avea unul sau mai multe argumente și returnează o valoare pentru fiecare rând rezultat
în urma interogării.
Există mai multe tipuri de funcții pe un singur rând: caracter, numerice, de date, de conversie etc.
De exemplu, cele mai importante funcții caracter sunt:
UPPER(<expresie>)
UPPER convertește alfa caracterele din caractere mici în caractere mari.
LOWER (<expresie>)
LOWER convertește alfa caracterele din caractere mari în caractere mici.
SUBSTRING(<expresie>, m [, n])
SUBSTRING returnează un șir de n caractere începând cu caracterul aflat pe poziția m .
LEN (<expresie>)
LEN returnează numărul de caractere dintr-o expresie.
REPLACE(<text>, <şir_căutare>, <şir_înlocuire>)
REPLACE caută un anumit text într-un șir de caractere și, dacă îl găsește, îl înlocuiește.
CONCAT (<expresie1>, <expresie2>)
CONCAT funcția este echivalentul operatorului de concatenare (+).
La început, în calitate de exemplu practic, este examinată o funcție de tipul Single row. Fie este
formulată o interogare, care solicită prezentarea cu majuscule a coloanei Disciplina din tabelul discipline.
Pentru aceasta, este utilizată funcția UPPER:

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ă:

…<expresie> AS <nume expresie>…


Se observă că noul nume atribuit unei coloane sau expresii urmează vechiului nume sau expresiei,
precedat de cuvântul-cheie AS. Îndeosebi, acesta este un lucru obișnuit, fiindcă, după funcții, trebuie să fie
indicat numele coloanei, folosind clauza AS, precum este prezentat în următorul exemplu:

Crearea unui nou câmp calculat pe baza câmpurilor din tabelele implicate în interogare se
realizează, în exemplul precedent, prin numele Tip_majuscule.

4.4.5. Funcții de grup


Funcțiile de grup (agregare) prelucrează mulțimi de înregistrări (linii) ale tabelului și returnează un
anumit rezultat. Majoritatea acestor funcții, de obicei, acționează asupra tuturor liniilor tabelului. Ele
acceptă următorii parametri:
● ALL – face ca funcția să considere toate înregistrările, inclusiv cele duplicate. Această opțiune
este implicită.
● DISTINCT – face ca funcția să considere numai înregistrările care nu posedă o valoare duplicată
(în câmpurile specificate).
Din funcțiile de agregare, fac parte:
SUM ([DISTINCT | ALL] <expresie>)
Funcția SUM calculează suma unei mulțimi de valori numerice.
AVG ([DISTINCT | ALL] <expresie>)
Funcția AVG returnează media aritmetică a expresiei <expresie>.
{MAX | MIN} ([DISTINCT | ALL] <expresie>)
Funcția MAX/MIN returnează valoarea maximă sau minimă a expresiei.
COUNT (* | [DISTINCT | ALL] <expresie>)
Funcția COUNT returnează numărul de linii nenule returnate de interogare. Aici, <expresie>
reprezintă un câmp sau expresie.

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.

SELECT COUNT(*) FROM discipline;


În contrast COUNT(<expresie>) întoarce numărul de valori nenule din coloana specificată de
<expresie>. Interogarea din următorul exemplu solicită numărul total de linii în care valoarea câmpului
Nr_ore_plan_disciplina este diferită de valoarea NULL.

SELECT COUNT(Nr_ore_plan_disciplina) FROM discipline;


Această funcție, COUNT(DISTINCT <expresie>), returnează numărul de valori distincte, nenule
din coloana specificată de <expresie>. Calcularea numărului de linii, unde câmpul
Nr_ore_plan_disciplina are valori distincte, este prezentată de interogarea de mai jos:

SELECT COUNT(DISTINCT Nr_ore_plan_disciplina) FROM discipline;


Până acum, toate funcțiile de grup au fost aplicate întregului tabel. Dar se poate împarți tabelul în
grupuri mai mici. Folosirea acestuia returnează informații sumare despre fiecare grup. Sintaxa instruiților
SELECT cu funcții de grup pot folosi clauzele GROUP BY sau HAVING:

SELECT [ALL|DISTINCT] <listă coloane>


FROM <listă tabele>
[WHERE <condiție căutare>]
[GROUP BY <listă coloane>
[HAVING <caracteristică_grup>]]
[ORDER BY <listă coloane> [ASC | DESC] ]

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).

Interogarea ce urmează calculează suma punctelor obținute (câmpul Suma_balurilor_acumulate)


după primul test (prima evaluare). Punctele afișate sunt prezentate per grupă. În așa fel, se poate observa
care grupă a adunat mai multe puncte.

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.

4.5. Subinterogări și operatori pe mulțimi


O subinterogare este o interogare inclusă într-o altă interogare. Rezultatul subinterogării este utilizat
de SGBD pentru a determina rezultatele interogării de nivel mai înalt care conține subinterogarea. În
forma sa cea mai simplă subinterogarea apare în clauza WHERE. Dar pot exista și subinterogări în
clauzele FROM, HAVING și în alte clauze.
În afară de acesta, operatorii definiți pe mulțimi permit obținerea unei interogări a mai multor tabele
combinând rezultatele a două sau mai multe interogări independente una de cealaltă.

4.5.1. Subinterogări corelate și necorelate


Subinterogările mai sunt numite instrucțiuni SELECT imbricate. Utilizarea blocurilor imbricate
permite exprimarea simplă și într-un mod foarte clar a expresiilor cuantificate. Un bloc intern, de obicei,
se numește subinterogare. O subinterogare este o cerere care, de regulă, restituie un singur câmp. Prin
intermediul subinterogărilor se pot construi interogări complexe pe baza unor instrucțiuni simple.
O subinterogare (subcerere) este o instrucțiune SELECT integrată într-o clauză a altei instrucțiuni
SQL, numită instrucțiune exterioară sau instrucțiune „părinte“. Prin urmare, subinterogările sunt
instrucțiuni interioare.
Rezultatele subinterogării sunt utilizate în cadrul cererii exterioare, pentru a determina rezultatul
final. În funcție de modul de evaluare a subinterogării în raport cu cererea exterioară, subinterogările pot
fi: subinterogări necorelate (nesincronizate) sau corelate (sincronizate).
Prima clasă de subinterogări este evaluată dinspre interior către exterior, adică interogarea externă
acționează pe baza rezultatului cererii interne. Subinterogările necorelate care apar în clauza WHERE a
unei interogări sunt de forma următoare:

SELECT expresie1 [, expresie2 …] FROM tabel_1


WHERE <expresie_condiţie> <operator>
(SELECT expresie FROM tabel_2);
Pașii de execuție ai unei subinterogări corelate:
● cererea internă este executată prima și determină o valoare (sau o mulțime de valori);
● cererea externă se execută o singură dată, utilizând valorile returnate de cererea internă.

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ă:

SELECT expresie_ext_1 [,expresie_ext_2 …] FROM tabel_1_ext


WHERE <expresie_condiţie> <operator>
(SELECT expresie FROM tabel_2
WHERE expresie = tabel_1_ext.expresie_ext);
Pașii de execuție ai unei subinterogări corelate:
● cererea externă determină un rând candidat;
● cererea internă este executată utilizând valoarea rândului candidat;
● valorile rezultate din cererea internă sunt utilizate pentru calificarea sau descalificarea rândului
candidat;
● pașii precedenți se repetă până când nu mai există rânduri candidat.
Deși subinterogarea corelata se execută repetat, o data pentru fiecare linie în cererea principală,
aceasta nu înseamnă că subinterogările corelate sunt mai puțin eficiente ca subcererile necorelate
obișnuite.
Din punct de vedere al numărului de linii și coloane returnate, există trei tipuri de subinterogări:
● scalare, care returnează o singură coloană și o singură linie și pot fi folosite atunci când este
necesară o singură valoare;
● pe o linie, care returnează coloane multiple, dar o singură linie, și pot fi utile atunci când este
necesar un constructor de valori ale liniei (de regulă, în predicate);
● pe un tabel, care returnează una sau mai multe coloane și linii multiple
Subinterogarea se leagă cu interogarea principală folosind operatorii. Operatorul ce intervine în
specificarea condiției poate fi de tip:
● operator single row (>, =, >=, <, <>, <=), care poate fi utilizat dacă subinterogarea returnează o
singură linie;
● operator multiple row (IN, ANY, ALL), care poate fi folosit dacă subinterogarea returnează mai
mult de o linie.
● operator EXISTS, care poate fi folosit dacă subinterogarea returnează un boolean.
Operatorul NOT poate fi utilizat în combinație cu IN, ANY, ALL și EXISTS.
Cuvintele-cheie ANY și ALL pot fi utilizate cu subinterogările care produc o singură coloană de
valori. Dacă subinterogarea este precedată de către cuvântul-cheie ALL, atunci condiția va fi adevărată
numai dacă este satisfăcută de către toate valorile produse de subinterogare. Astfel, <ALL are semnificația
„mai mic decât minimul“, iar >ALL este echivalent cu „mai mare decât maximul“. Dacă subinterogarea
este precedată de către cuvântul-cheie ANY, condiția va fi adevărată dacă este satisfăcută de către oricare
(una sau mai multe) dintre valorile produse de subinterogare. În comparații, <ANY are semnificația „mai
mic decât maximul“; >ANY înseamnă „mai mare decât minimul“; =ANY este echivalent cu operatorul IN.
Dacă subinterogarea returnează mulțimea vidă, atunci condiția ALL va returna valoarea TRUE, iar
condiția ANY va returna valoarea FALSE. Cuvântul-cheie EXISTS este urmată de o subinterogare între
paranteze și ia valoarea TRUE, dacă există cel puțin un tuplu care satisface condițiile subinterogării. Iar în
cazul când subinterogare nu întoarce nicio linie, rezultatul predicatului EXISTS este FALSE. Standardul
ISO permite utilizarea cuvântului-cheie SOME, în locul lui ANY.

4.5.2. Subinterogări ce întorc un scalar sau o linie


Există subinterogări care, în mod obligatoriu, trebuie să întoarcă un scalar sau o singură linie.
Acestea folosesc următoarea sintaxă:

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.

4.5.3. Subinterogări cu operatorul IN


Operatorul IN verifică apartenența unei expresii (sau unei secvențe de expresii) la o mulțime de
valori rezultată dintr-o subinterogare. Predicatul care include operatorul IN utilizat cu o interogare
subordonată are următoarea formă generală:

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.'

În calitate de filtru al interogării principale, se utilizează negația tuturor elementelor conținute în


tabelul rezultant al celor 2 subinterogări.

4.5.4. Subinterogări cu operatorul ANY


Operatorul ANY poate modifica acțiunile operatorului de comparație pentru a permite interogării
externe să accepte mai multe linii returnate de interogarea subordonată. Sintaxa generală a predicatului,
care conține operatorul ANY, este următoarea:

…{expresie|(expresie1 [, expresie2 …])}


{>|<|=|>=|<=|<>} ANY (<subinterogare>)…
Cuvântul-cheie ANY, care trebuie să urmeze după un operator de comparație întoarce valoarea
adevărat dacă este adevărată comparația pentru cel puțin unul dintre valorile pe care le întoarce
subinterogarea.
Din cele ce urmează, reiese că subinterogarea nu întoarce numai o valoare de tip scalar sau de tip
coloană, ci și de tip tabel. Subinterogările de tip tabel sunt acelea care întorc mai multe linii și mai multe
coloane.
Predicatul ia valoarea TRUE, dacă rezultatul comparației cu cel puțin o valoare construită de
subcerere este TRUE și întoarce valoarea FALSE, în caz contrar (se include și cazul special al interogării,
care nu returnează nicio linie). Dacă subinterogarea returnează o linie cu componente nule, predicatul nu
poate fi FALSE (sau ia valoarea TRUE, sau ia NULL).
Operatorul IN este echivalent cu = ANY. Ca și în cazul lui IN, nu se poate presupune că
subinterogarea este complet evaluată.
Executarea exemplului următor are același efect ca și celui din secțiunea precedentă.

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.

4.5.5. Subinterogări cu operatorul ALL


Operatorul ALL compară o valoare cu toate valorile returnate de o subinterogare. Sintaxa generală
de utilizare a acestui operator în predicatele de filtrare are forma:

…{expresie|(expresie1 [, expresie2 …])}


{>|<|=|>=|<=|<>} ALL (<subinterogare>)…
Comparația este adevărată daca ea este adevărată pentru orice valoare returnata de subinterogare.
Partea stângă reprezintă o expresie sau o linie de expresii, iar partea dreaptă este o subinterogare în
paranteze care returnează exact același număr și tip de coloane ca al expresiei sau ca al expresiilor ce
constituie linia.
Mai întâi, va fi examinată situația când, în partea stângă, este un scalar, sau o expresie care este
evaluată la un scalar:
În această utilizare a operatorului ALL, subinterogarea trebuie să returneze o singură coloană.
Predicatul se evaluează la TRUE, dacă comparația stabilită de către operatorul de comparație este valabilă
pentru toate valorile coloanei revenite de la interogarea subordonată. Predicatul se evaluează, de
asemenea, la TRUE atunci când subinterogarea nu returnează nicio linie. În caz contrar, se evaluează la
FALSE. În cazul în care subinterogarea returnează vreun NULL, predicatul se evaluează la NULL.
În utilizarea care urmează a operatorului ALL, în partea stângă este o linie. Expresiile din partea
stângă sunt evaluate și comparate cu fiecare din liniile rezultatului, folosind operatorul de comparație dat.
Rezultatul predicatului cu ALL este TRUE, dacă comparația returnează TRUE pentru toate liniile
subinterogării (se include și cazul special al interogării care nu returnează nicio linie). Rezultatul este
FALSE, dacă comparația are valoarea FALSE cel puțin pentru o linie returnată de interogarea subordonată.
Rezultatul este NULL, dacă comparația nu are valoarea FALSE pentru vreo linie și returnează NULL
pentru cel puțin o linie.

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'.

4.5.6. Subinterogări cu operatorul EXISTS


Majoritatea subinterogărilor prezentate mai sus au fost independente de interogarea exterioara (cea
care le folosea). Put fi create însă și subinterogări corelate cu interogarea exterioară. Operatorul EXISTS
este frecvent proiectat pentru a fi utilizat numai în contextul subinterogărilor. El este folosit cu
subinterogările corelate și testează dacă ceva există sau nu există:

…[NOT] EXISTS (<subinterogare>) …


Astfel, operatorul produce un rezultat simplu, de tip boolean. Condiția obținută cu ajutorul
cuvântului-cheie EXISTS este TRUE, dacă există cel puțin o linie returnată de către subcerere, și este
FALSE, dacă subinterogarea returnează o mulțime rezultat vidă. Acest operator este util pentru a testa
dacă valoarea recuperată de cererea externă există în mulțimea valorilor regăsite de o cerere internă
corelată a sa.
Deoarece operatorul EXISTS nu face decât să verifice existența sau inexistența liniilor în rezultatul
subinterogării, aceasta poate conține orice număr de coloane. Nefiind necesar ca subinterogarea să
returneze o anumită valoare, se poate selecta o constantă. De altfel, din punct de vedere al performanței,
selectarea unei constante asigură mai mare rapiditate decât selectarea unei coloane.
Se presupune că se dorește afișarea listei 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.

SQLQueryl.sql - LOC. .. versitatea (s.a (SS)r -ti X


_ - SELECT tl .
FROM discipline AS tl ,
:t ' SELECT MIN• Nr _ore_plan_disciplina j AS ore FROM d iscipli ne • AS t2
e: 4 l•JHERE tl . Nr_ore_p l an_discipli na = t2 . ore

121 % •

Im Results ~'i Messages


icate
dupa ld_Disciplina Disciplina Nr_ore __plan_disciplina
119 lntegrare 1nformationala europeana 20

4.5.8. lnterogari cu operatori din teoria mulfimilor


Un caz mai special de interogare a mai multor tabele este acela in care combinam rezultatele a doua
sau mai multe interogari relativ independente una de cealalta. Astfel, operatorii pe multimi combina
rezultatele obtinute din doua sau mai multe interogari. Cererile care contin operatori pe multimi se numesc
cereri compuse.
Interogarile cu operatiile uniunea, intersectia ~i diferenta sunt foarte aproape de interogarile scrise in
algebra relationala. Se formuleaza doua interogari care construiesc tabele cu scheme compatibile, adica cu
acel~i numar de campuri ~i de acel~i tip, ~i aceste cereri sunt legate cu cuvintele-cheie respective.
Operatorii folositi in acest scop sunt: UNION, UNION ALL, INTERSECT sau EXCEPT.
Sintaxa pentru utilizarea operatorilor din teoria multimilor este:

<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 %

mi Results @'Ill Messages


Id_ Profesor
HJ1
2 Hl4
3 ma
4 1{)2

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 %

mi Results @')'i Messages


ld_Profesor
1l8
2 12:6
3 110
L 131

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)

Tabelul discipline contine date despre identificatorul disciplinei (ld_Disciplina), disciplina


(Disciplina) ~i numarul de ore conform planului de invatamant (Nr_ore_plan_disciplina) . Se presupune
ca identificatorul disciplinei este unic pentru fiecare disciplina ~i numarul de ore dupa planul de
invatfilnant.

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

Sa se scrie interogarile in limbajul SQL ~i sa se afi~eze raspunsurile la aceste interogari:

1. Aflafi toate datele despre grupele de studii de la facultate.


2. Sa se obtina lista disciplinelor in ordine descrescatoare a numarului de ore.
3. Aflati cursurile (Disciplina) predate de fiecare profesor (Nume_Profesor, Prenume_Profesor)
sortate descrescator dupa nume ~i apoi prenume.
4. Afi~ati care dintre discipline au denumirea formata din mai mult de 20 de caractere?
5. Sa se afi~eze lista studentilor al caror nume se termina in ,,u"
6. Afi~ati numele ~i prenumele primilor 5 studenti, care au obtinut note in ordine descrescatoare la al
doilea test de la disciplina Baze de date. Sa se foloseasca optiunea TOP ... WITH TIES.
7. in ce grupa (Cod_ Grupa) invata studentii care locuiesc pe strada 31 August?
8. Obtineti identificatorii ~i numele studentilor, ale examenelor sustinute in anul 2018.
9. Gasiti numele, adresa studentilor ~i codul disciplinei la care studentii au avut eel putin o nota mai
mare decat 8 in 2018.
10. Gasiti studentii (numele, prenumele), care au obtinut la disciplina Baze de date (examen), in anul
2018, vreo nota mai mica de 8 ~i mai mare ca 4.
11. Furnizati numele ~i prenumele profesorilor, care au predat disciplina Baze de date, in 2018, ~i au
evaluat vreun student cu nota nesatisracatoare la reu~ita curenta.
lnstruc/iunea SELECT Transact-SQL

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.

5.1.1. Blocuri Transact-SQL


Orice unitate Transact-SQL contine unul sau mai multe blocuri, complet separate sau imbricate.
0 instructiune compusa se nume~te bloc. Un bloc permite tratare mai multe instructiuni ca pe una
singura. Cu alte cuvinte, instructiunea compusa sau blocul sunt echivalente sintactic cu o singura
instructiune. Un bloc Transact-SQL este compus din pana la 3 sectiuni: declarativa (optionalii),
executabila (obligatorie) ~i de tratare a exceptiilor ( optionala).
Exista 3 tipuri de blocuri:
• Blocuri anonime: acestea sunt blocuri Transact-SQL, care sunt definite in cadrul unei aplicatii
~i nu au nume.
• Proceduri: acestea sunt blocuri Transact-SQL, care au un nume, au parametri de intrare, dar nu
au parametri de ie~ire expliciti.
• Functii: acestea sunt blocuri Transact-SQL, care au un nume, au parametri de intrare ~i tot
timpul returneaza o valoare.
Corpul unei functii este o instructiune compusa. Domeniul de vizibilitate al unui identificator
declarat mtr-un bloc se intinde din punctul declaratiei panii la sfii.r~itul blocului. Identificatorii utilizati
lntr-un bloc pot fi ascun~i prin declaratii de acel~i nume in blocurile interioare ale blocului initial.
Transact-SQL: instrucfiuni procedurale

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.

• Declan~atoare de aplicape: blocuri Transact-SQL asociate unor evenimente din cadrul


aplicatiei ~i lansate in executie automat.
Blocul compus dintr-un cod executabil (obligatoriu): aceasta sectiune incepe cu cuvantul-cheie
BEGIN ~i se sf'ar~e~te cu END.
Sintaxa unui bloc de instructiuni are structura:

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:

DECLARE @<nume_variabila> <tip_date>


Limbajul Transact-SQL suporta toate tipurile de date prevazute in standardul SQL2, in plus, permite
defmirea de catre utilizator a unor noi tipuri de date.
intr-o linie de cod Transact-SQL, pot fi plasate mai multe declaratii de variabile ('in calitate de
altemativa fiecare declaratie poate ft plasata pe o linie separatii). De exemplu:

DECLARE @MyChar CHAR{9), @MyINT INTEGER, @MyDate DATETIME


Plasarea declaratiilor fiecarei variabile pe o linie separatii elimina necesitatea utilizarii virgulei, dar,
din piicate, suntem obligati, la mceputul fiecarei linii, sii preciziim cuvantul-cheie DECLARE.

DECLARE @MyChar CHAR(9)


DECLARE @MyINT INTEGER
DECLARE @MyData DATETIME
De regulii, cea mai importantA sarcina, dupa declaratie, este cea de initializare a variabilelor.
Initializarea - atribuirea valorii initiale unei variabile. Una dintre recomandarile Microsoft - pentru
atribuirea valorii unei variabile sii se foloseascii operatorul SET, in loc de instructiunea SELECT. in
continuare, urmeaza exemple de utilizare a doi operatori, cu toate acestea, cum mentioneaza Microsoft,
operatorul SET este special optimizat pentru a efectua operatiile de atribuire.
Transact-SQL: instrucfiuni procedurale

DECLARE @MyChar CHAR(9)


SET @MyChar = 'SQLServer'
irtuale) Altemativ, in Joe de operatorul SET, poate fi folosita instructiunea SELECT:

DECLARE @MyChar CHAR(9)


cadrul
SELECT @MyChar = 'SQLServer'
Limbajul Transact-SQL suporta toate instructiunile SQL, cu unele modificari de sintaxa, astfel incat
11-cheie
sa poata fi folosite in combinatie cu variabilele locale ale programului. De exemplu, forma modificata a
instructiunii SELECT, prin care se asigneaza variabile locale cu valori ale unor atribute selectate, este:

SELECT @<varl> = <expresiel> [,@<var2> = <expresie2> -l


FROM <lista_tabele> [WHERE <conditie>]
0 astfel de instructiune este utila pentru interogarile care returneaza o singura linie, deoarece
variabilele locale sunt setate cu valorile coloanelor primei linii a rezultatului, iar valorile din celelalte linii
se pierd (nemaifiind loc unde sa fie memorate). Atunci, cand o interogare returneaza o multime de linii, se
poate folosi un cursor.
ifl!P de 0 valoare poate fi atribuita unei variabile impreuna cu declararea ei, ca, de exemplu:

intre ele DECLARE @MyChar CHAR(9)= 'SQLServer'

5.1.3. Variabi/e globale


SQL Server ofera un numar mare de variabile globale, care sunt foarte eficiente pentru a fi
~ctiunea utilizate in Transact-SQL. Variabilele globale reprezinta un tip special de variabila. Serverul
:claratii, mentine intotdeauna valorile acestor variabile. Toate variabilele globale reprezinta informatii
specifice serverului sau unei sesiuni curente a utilizatorului.
re pot fi Denumirile variabilelor globale incep cu prefixul @@. Nu trebuie sa fie declarate, deoarece
riabilele serverul le mentine constant. Cu alte cuvinte, ele sunt functii definite de sistem ~i nu pot fi
declarate [25].
:ator (un De~i, in versiunile anterioare ale Microsoft SQL Server, functiile @@ sunt denumite
variabile globale, ele nu sunt variabile ~i nu au acel~i comportament ca ~i variabilele. Functiile
@@sunt functii de sistem, iar utilizarea sintaxelor acestora respecta regulile functiilor [57].
Urmeaza cateva variabile globale ale serverului:

, 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: }

Limba: us_e ngl ish


Serve r : DES KTOP - OD4 5BG5
Conexi u n i : 32767

5.2. Structuri de control ale fluxului


Instructiunile de limbaj pentru controlul fluxului in Transact SQL faciliteaza extinderea structurilor
cu cele alternative, repetitive, selective ~i conditionale complexe. Cele mai importante instructiuni, din
aceste categorii, sunt: CASE, IF ..ELSE, WHILE, BREAK, CONTINUE, RETURN, GOTO, WAITFOR etc.

5.2. 1. Structura selectiva CASE


Expresia CASE este o adaugire recenta, dar foarte importanta, la limbajul SQL. Pentru prima data,
pfilti ale instructiunilor SQL pot fi executate conditional. De exemplu, o coloana din rezultatele interogarii
poate fi formatata in functie de valorile continute pe o alta coloana.
Expresia CASE are urmatoarea sintaxa generala:

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

ry1.sql - LOC. .. versitatea (sa (54))' -P X i@MJ!i1J.!$QIH!.liiQ@tJ,ijmHJ


1 ,=_SELECT DISTINCT Id_Disc iplina I d_Grupa ,
2 CASE Id_Grupa
3 \-JHEN 1 THEN 'CIB171'
4 WHEN 2 THEN 'INF171'
S WHEN 3 THEN 'TI171'
) ELSE 'necunoscuta '
7 END AS Grupa_descifrare
f3 FROM stu denti reusita ORDER BY Id_Dis ciplina

ml Results [§111 Messages


Id _Disciplina ld_Grupa Grupa_descifrare

["~-·~·" " "'·" " " " " " ·:


3 Tl171
2 101 2 INF171
J 101 3 Tl171
4 102 2 INF171
5 103 3 Tl1 71
s: HJ4 3 Tl1 71
1rn;; 1 r1n1>1
'
CASE poate fi folosit in orice instructiune sau clauza care permite o expresie valida. De exemplu,
CASE poate fi utilizat in instructiunile SELECT, UPDATE, DELETE ~i SET, precum ~i in clauzele IN,
WHERE, ORDER BY, HAVING ~i in lista dupa clauza SELECT.
·iior
din
5.2.2. Structura alternativa IF... ELSE
tc.
Structura de control alternativ modifica fluxul de lucru, executand sau nu anumite poqiuni de cod,
in functie de indeplinirea sau neindeplinirea unor conditii. Probabil, cea mai des utilizata structura de
control al fluxului este IF. .. ELSE .
.ata,
~arii Instructiunea IF... ELSE, cu care, in Transact-SQL se implementeaza o structura alternativa de luare
a deciziilor, are urmatorul format general:

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.

este in urmatorul exemplu, sunt utilizate cuvintele-cheie IF ~i ELSE, ~i se verifica conditiile de


executare a acestei structuri. Daca numarul de profesori f'ara ore este mai mare de 16, se executa
instructiunea de tiparire a faptului ca ,,Foarte multi profesori nu au ore la facultate". in caz contrar, se
~SE, propune un numar de profesori, care vor avea ore planificate la aceasta facultate ~i un numar care nu vor
av ea.
. din
ntru
Transact-SQL: instruc/iuni procedurale

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 %

ml Results [§Ji Messages

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.

5.2.3. Structura repetitiva WHILE


Structurile de control repetitive executa anumite poqiuni de cod de un numar determinat de ori. in
sistemul Transact-SQL, exista o posibilitate - aplicarea operatorului WHILE. Operatorul WHILE testeaza
o conditie booleana ~i executa repetat o instructiune sau un bloc de instructiuni. Executarea acestor
instructiuni se va repeta atata timp cat conditia specificata va ramane adevarata.
Corpul instructiunii poate fi o instructiune vida, o instructiune simpla sau un bloc de instructiuni ce
vor fi executate repetitiv. Deoarece instructiunea WHILE realizeaza testarea conditiei la inceputul
instructiunii, aceasta instructiune este buna de utilizat in situatiile in care nu se dore~te executarea buclei,
evident, daca conditia nu este adevarata.
Sintaxa, in forma sa generala, a operatorului, arata dupa cum urmeaza:

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:

SQLQueryl.sql-COlELEA.master {sa ( 58))"' X IRl Results §')il Messages

_ - DEC LARE @"ly HIT HITE GER Nurnarul

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:

SQLQueryl.sql - COIBEA.master (sa (58))" X §')1 Messages


- DEC ARE @conto r Un I t eratia ~uclei 1
}
SET @conto r "'" a I ::.era-cia :-:ucl e .i 2
l - WHILE i 1 = 1 1 I:: er s-ci a buclei 3
e - BEGIN It.e r a-:ia :C· UCl~i 'i
SET @conto r @contor · 1 I t er a.tia i::uclei 5
IF ·@conto r 9 =· (3- , I::er a"Cia '.=ucle.:. 6
BREAK I t.er a:: :ia bucle.J..
PRINT 'Iteratia buclei ' ~ CAST <@conto r AS CHAR • "
I te ra ~ia bucle.i 0

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.

SQLQuery 1.sql - CDTELEA .master (sa ( 58)) " >•


'-: DEC LARE @"iy HH nn
' SET @"lyINT "' 1
1§']'11 Messages
• ~WHILE 1~Ny INT · ,,, 5
4 ':;;, BEGIN 1
PR Hff @"~y INT 2
SET @"lyINT " @"iyIIH + 1 3
CONTIWJE , 4
IF @"~yINT "' 4
5
BREAK;
_;:: END
100 % .• ~

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 [<expresie de tip intreg>


Urmatorul exemplu ilustreaza utilizarea Transact-SQL cu instructiunea RETURN:
Trflnsflct-SQL: instrucfiuni procedurale

SQLQuery1.sql- MV.master (sa (S3}}" i:! X


~ fvlessages
_ - DECLARE @MyINT INT c 1
- ~·!HILE 1 =1 1
BEGIN 2
i.l - IF @MyINT 5
3
RETURN
ELSE
PRINT @My INT
SET @My U JT -::: @My INT -< 1
END
121 % •

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.

5.2. 7. Goto-uri t;i etichete


Instructiunea GOTO ofera controlul selectiv al actiunilor ~i se folose~te la saltul neconditionat la o
eticheta. Instructiune care urmeaza dupa GOTO este ignorata ~i procesarea continua la eticheta.
Instructiunile GOTO ~i etichetele pot fi folosite, in orice toe, al unei proceduri, pachet sau bloc de
instructiuni.
Sintaxa instructiunii:

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:

SQLQueiy1.sql - MV.mast er (sa [53))"' -P X


- DECLARE @v1 FLOAT
.. DECLARE @v2 FLOAT - HA UD\ \

- - IF @v1 @v2 GOTO V1 mai ma re


:;, ELSE IF @v1 @v2 GOTO V2 ma i ma re
.-;

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

5.2.8. Operatorului WA/TFOR


Cu ajutorul operatorului WAITFOR, interogarile pot fi trecute in regimul de ~teptare. Urmeaza
doua exemple de utilizare a "~teptarii" .
Se dore~te compararea datelor dintr-un tabel modificate peste o ora. Pentru a face acest lucru, se
selecteaza datele necesare intr-un tabel temporar, iar peste o ora se compara con~inutul tabelului nou cu
datele salvate anterior. Daca nu ar exista posibilitatea de utilizare a instructiunii WAITFOR, vor trebui
aplicate doua scenarii separate, cu o pauza de o ora intre ele. Dar, datorita operatorului WAITFOR, toate
acestea se poate face in mod automat, f'ara costuri suplimentare de munca.
Un alt exemplu de aplicare ar fi cazul cand se dore~te fixarea unui scenariu specific, de exemplu, la
sfar~itul
zilei de lucru. Daca aceasta ar fi fost o sarcina zilnica, se poate trage concluzia ca activitatea
manuala ar fi foarte neeficienta.
In general, operatorul arata, precum urmeaza:
WAIT FOR
{
DELAY 'timp a~teptare'
TIME 'ora executie'
}

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:

WAITFOR DELAY '00:01'


SELECT * FROM discipline
Preluarea datelor din tabelul discipline intarzie pana la ora 18:30. Instructiunea e redata in
. urmatorul exemplu:

WAITFOR TIME '18:30'


SELECT * FROM discipline

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

5.3.1. Valoarea NULL

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.

5.3.2.. Functia COALESCE


'
0 exceptie de la aceasta regula o constituie functia COALESCE D.QJ.. Functia COALESCE
format returneaza prima expresie nenula din lista de expresii ce constituie parametrii acestei functii. Sintaxa
e, prin functiei este urmatoarea:

COALESCE ( <expresiel>, ... <expresieN>)


lmentul
:xecutie unde se returneaza <expresiel>, daca aceasta este nenula, se returneaza <expresie2> ill cazul In care
prima expresie este nula, dar a doua e nenula. Expresia <expresieN> este returnata in cazul in care aceasta
este nenula, dar toate expresiile precedente sunt nule. Toate expresiile trebuie sa fie de acel~i tip. Functia
:rogarea data permite inlocuirea valorii NULL cu o alta valoare.
Functie COALESCE este echivalenta cu o expresie CASE, ce intoarce primul NULL dintr-o lista:

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 ; ,

{ 2 , JL._,f,JL:., 'y' >,


' 3 ,f'llJL l_ ,l.JLL, fli..LL)

·3 SELECT Id _,COALESCE coll , col2 , col3 AS Primul nenul FROM #t


121 %

m3 Results ~II Messages


Id P!imul_nenul
1 x
2 2 J'
3 3 NULL

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:

ISNULL (<expresiel>, <expresie2>)


unde <expresiel > reprezintii valoarea-sursii sau o expresie care poate lua valoarea NULL, iar <expresie2>
reprezinta valoarea-destinatie pentru convertirea valorii NULL.
Functia returneaza <expresiel >, daca aceasta nu este NULL, <expresie2> in caz contrar. Functia
data poate fi utilizata pentru convertirea oriciirui tip de date, dar tipul de date returnat este intotdeauna de
acela~i tip ca ~i tipul expresiei <expresiel »

in continuare, este afi~at un exemplu de utilizare a ambelor functii in baza tabelului temporar creat
anterior.

- SELECT Id " col2 ,.


ISNUL L col2 ,. '~-1' \ AS [ I SNUL L] ~
COALESCE ' col2 , 'w' , AS [COALESCE]
FROM #t

121 11/a.

!:m Results ~ Messages


Id col2 IS NULL COALESCE
:·········· ..:
l. .1.......: x x x
2 2 NULL w '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

Functia ISNULL este echivalenta cu urmatoarea expresie CASE:

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:

NULLIF (<expresiel>, <expresie2>)


unde <expresiel > este valoarea-sursa comparata cu <expresie2>, iar <expresie2>, la randul sau, este
valoarea-sursa comparata cu <expresiel > (daca aceasta nu este egala cu <expresiel >, valoarea expresiei
<expresiel > este returnata).
Este echivalenta cu o expresie CASE, m care se returneaza NULL daca <expresiel > =
<expresie2>:

CASE
WHEN <expresiel> = <expresie2> THEN NULL
ELSE <expresiel>
END

> 5.4. Excepfii


Exceptiile sunt problemele (de obicei, erorile), care nu permit programului sa continue. Acest lucru
ia se intampla din lipsa de informatie suficienta ~i, de aceea, controlul se transmite altei plifti a programului.
le Tratarea exceptiilor este un mijloc relativ simplu de determinare a erorilor, prezinta mecanismul de
indicare directa a erorii ~i vizualizarea ~i verificarea exceptiei m procesul de compilare.

5.4. 1. Gestiunea erorilor intr-un cod


Exista doua moduri de a gestiona erorile. Primul consta m setarea mtr-o structura a exceptiei TRY
blocul de instructiuni care urmeaza sa fie testat, iar m CATCH (tratarea structurata a erorilor)., eroarea
care trebuie ridicata. Al doilea mod consta m testarea valorii variabilei de sistem @@ ERROR (tratarea
nestructurata a erorilor).
Sa vedem sintaxa structurii TRY. .. CATCH:

Porne$te blocul de instructiuni "protejat de eroare"


BEGIN TRY
{instructiune_sqllbloc_sql}
END TRY
-- incepe blocul de instructiuni de tratare a erorii
BEGIN CATCH
[{instructiune_sqllbloc_sql}]
END CATCH ( ; ]
Instructiunile TRY... CATCH nu pot fi disociate.
Blocul TRYpermite gruparea tuturor instructiunilor, care pot genera o eroare. Daca apare cazul sau
daca o instructiune provoaca o eroare m blocul TRY, comanda este data direct primei instructiuni a
te blocului CATCH.
r
Transact-SQL: instruc/iuni procedurale

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.

5.4.2. Obfinerea informafiilor despre erori


Pentru a obtine informatii detaliate privind erorile obtinute, functiile speciale de eroare sunt
disponibile numai In blocul CATCH. Astfel, In domeniul unui bloc CATCH, urmatoarele functii de sistem
pot fi folosite pentru a obtine informatii despre eroarea care a cauzat executarea blocului CATCH:
ERROR_MESSAGE ()
Functia returneaza textul complet al mesajului de eroare pentru a comunica aplicatiei. Valorile
fumizate de parametrii inlocuibili sunt incluse in text. Aceste valori includ nume de obiecte, extensii
sau timp. Valoarea returnata este de tip NVARCHAR (2048).
Transact-SQL: instrucpuni procedurale

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.

5.4.3. Variabila globals @@ERROR


ire sunt in versiunile anterioare mai vechi ale sistemului SQL Server, instructiunea TRY...CATCH nu era
e sistem disponibila. in acele versiuni, erorile erau controlate utilizand variabila de sistem globala @@ERROR,
care stocheaza numarul de eroare produs de ultima instructiune Transact SQL executata.
Un exemplu de utilizare a variabilei globale @@ERROR:
Valorile
extensii DECLARE @divizor int ,
@dividend int ,
@resultat int
SET @dividend = 100
SET @divizor = 0
-- Aceasta linie duce la o eroare dupa impartirea la 0
Transact-SQL: instrucfiuni procedurale

SET @resultat = @dividend/@divizor


IF @@ERROR = 0
BEGIN
PRINT 'Nu exista nici o eroare'
END
ELSE
BEGIN
PRINT 'A aparut o eroare'
END
Utilizarea variabilei globale @@ ERROR, pentru a controla erorile, poate provoca multe probleme.
Una dintre cele mai frecvente este, tara indoiala, includerea unei noi instructiuni Transact-SQL intre linia
care a provocat eroarea ~i cea care o controleaza. Aceasta instructiune noua introdusa restabile~te valoarea
@@ERROR ~i nu va controla eroarea.
Urmatorul exemplu ilustreaza aceasta situatie:

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 'Controlul erorii ... ' -- Aceasta linie stabile~te @@ERROR= 0
IF @@ERROR = 0
BEGIN
-- Aceasta parte este executata!
PRINT 'Nu exista nici o eroare'
END
ELSE
BEGIN
PRINT 'Exista o eroare'
END

5.4.4. Ridicarea unei excepfii


Pentru fiecare eroare, care apare in SQL Server, sistemul produce un mesaj de eroare. Pot fi definite
conditiile proprii de exceptie cu ajutorul instructiunii RAISERROR, care genereaza un mesaj de eroare ~i
initiaza procesarea erorilor pentru sesiune. RAISERROR poate referi fie un mesaj definit de utilizator, fie
poate sa construiasca un mesaj in mod dinamic.
Sintaxa:

RAISERROR ( { <id_msg> I <str_msg> I <@variabila_locala> }


{ , <severitatea> , <starea> }
[ , <argument> [ , ... n] ] )
[WITH <optiune> [ , ... n] ]
in general, toate mesajele au acee~i structura: un numar de eroare, un mesaj de explicare a erorii,
-un indicator de severitate (gravitate), o stare, numele procedurii asociate erorii ~i numarul liniei care a
provocat eroarea.
Severitatea este un indicator - un numar de la 0 la 24 (gravitatea). Dar pot fi atribuite numai valori
de la 0 la 18. Erorile de la 20 la 25 sunt considerate fatale pentru sistem ~i conexiunea este terminata dupa
afi~area mesajului de eroare a comenzii RAISERROR. Nivelul de severitate de la 19 la 25 poate fi
specificat doar de catre membrii care au rolul sysadmin sau de catre utilizatori cu permisiuni ALTER
TRACE.
Transact-SQL: instrucfiuni procedurale

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:

RAISERROR ('Numarul de studenti admi~i este mic .I' , 12, 1)


Atunci, cand se ridicii o eroare, poate fi dat fie identificatorul erorii in cauzii, fie este reprezentat un
mesaj special. Dacii este adus un mesaj special, ca in exemplul de mai sus, trebuie sa fie neaparat precizate
bleme. o gravitate ~i o stare. Poate fi adaugata o clauzii WITH urmand instructiunea RAISERROR pentru a aplica
·e linia una dintre cele trei optiuni posibile:
tloarea

LOG: Mesajul va fi inregistrat in vizualizatorul de evenimente Windows.


NOWAIT: Mesajul va fi livrat tara ~teptarea utilizatorului.
SE TERROR: Permite atribuirea @@ERROR ~i ERROR_NUMBER cu numarul mesajului de eroare.
Uneori, este necesar sa se provoace. in mod voluntar, o eroare, de exemplu, am putea fi interesati de
generarea unei erori atunci cand datele incalca o regula din domeniul de interes.
Astfel, poate fi provocata o eroare de executie prin intermediul functiei RAISERROR:

DECLARE @tip int,


@clasificare int
SET @tip = 1
SET @clasificare = 3
IF (@tip = 1 AND @clasificare = 3)
BEGIN
RAISERROR ('Tipul nu poate avea valoarea 1 ~i clasificarea 3',
16, Severitatea
1 Stareao
)
END
Poate fi, de asemenea, definit un mesaj de eroare de catre procedura stocata sp_ addmessage ~i
suprimata de procedura stocata sp_dropmessage.
lefinite Urrneaza sintaxa procedurii stocate necesare pentru crearea unui mesaj de eroare:
:oare ~i
Ltor, fie exec sp_addmessage @msgnum, @severity, @msgtext,
@lang, @with_log, @replace
in ordine, parametrii corespund urmatoarelor date: identificator, severitate, mesaj, limba, jurnal ~i
inlocuire. Parametrii Log ~i Replace nu sunt obligatorii. Inlocuirea (@rep/ace) este utilizata pentru a
substitui mesajul de eroare cu o eroare existenta. Cu toate acestea, pentru a cuno~te codul limbii utilizate,
se folose~te procedura stocata sp_ helplanguage.

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. CREAREA TABELELOR $1 INDEC$1LOR


in capitolul de fatii sunt tratate structura instructiunilor CREATE, ALTER, INSERT, UPDATE,
DELETE utilizate pentru crearea ~i gestiunea tabelelor. in afara de aceasta, sunt examinate aspectele de
creare ~i administrare a indec~ilor, utilizand instructiuni Transact-SQL, precum ~i in mediul grafic
Microsoft SQL Server Management Studio [2] .
Sistemul SQL Server poate gestiona, mtr-o baza de date, panii la douii miliarde de tabele. Fiecare
tabel regulat (nonwide) poate sa continii panii la 1024 coloane, iar dimensiunea maxima, in octeti, pentru o
inregistrare (linie) este de 8060. Aceste limite sunt mai putin restrictive pentru tabelele cu coloane de tip
VARCHAR, NVARCHAR, VARBINARY sau SQL VARIANT [32].

6.1. Crearea fi modificarea structurii tabelelor in Transact-SQL


Limbajul Transact-SQL, pentru crearea ~i modificarea structurii tabelelor, ofera instructiunile
CREATE TABLE ~i ALTER TABLE, respectiv.

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:

CREATE TABLE <nume tabel> (


<coloanal> <tip_datal> [DEFAULT <exprl>] [<constr_coloanal>]
[,<coloana2> <tip_data2> [DEFAULT <expr2>] [ <constr_coloanal>], ... ]
[<constrangeri_tabel>] );
• <nume_tabel> - indica numele tabelului creat;
• <coloana> - indica numele cfu:npului ce trebuie creat in tabel;
• <tip_data> - indica tipului cfu:npului;
• DEFAULT <expr> - defmirea valorii implicite pe care o ia expresia pentru coloana.
Constriingerile pot fi clasificate in:
• constrangeri de coloanii, care definesc valorile pe care le poate lua o coloana sau mai multe
coloane (DEFAULT, NOT NULL, UNIQUE, CHECK);
• constrangeri de integritate a tabelului, precizand cheia primara a acestuia (PRIMARY KEY);
• constrangeri de integritate referentiala, care asigura coerenta dintre cheile primare (sau unice) ~i
cheile exteme corespunziitoare (FOREIGN KEY).
Pe de alta parte, constrangerile se pot clasifica dupa nivelul la care sunt definite in:
• constrangeri la nivel de coloana;
• constrangeri la nivel de tabel, care pot actiona asupra unei combinatii de coloane.
Constriingerile impuse fiecarei coloane, ca ~i constrangerile de tabel, sunt optionale. Constrangerile
NOT NULL ~i DEFAULT se pot defini doar la nivel de coloana. Constrangerile UNIQUE, PRIMARY
KEY, FOREIGN KEY ~i CHECK pot fi definite atat la nivel de coloana, cat ~i la nivel de tabel. Totu~i,
dacA aceste constrangeri implica mai multe coloane, atunci trebuie sa fie definite obligatoriu la nivel de
label.
Aceasta este sintaxa de bazii a instructiunii pentru crearea unei structuri de tabel in SQL. Existii
sintaxe mai complexe, la care se va reveni mai tarziu.
Crearea tabelelor ~i indeqilor

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:

LJ SQLQuery1.sqr - MV.universitatea (sa (53))" - Microsoft SQL Server Management Stud io


Eile J;dit Y.iew Query P.roject Qebug Iools Window J:jelp

c,'j universitatea

SQLQueryl.sql- MV .... versitatea (sa (53))' ~ X


' - CREATE TABLE orarul ' Id _Disciplina INT, Id_Profesor INT , Id_Grupa SMALLINT ,
2 Zi VARCHAR ' 50 . Ora TIME Auditoriu INT1
12.1 % -
{§')'i Messages
Cc-rr.rnands comple'Ced 3ucc.e3 a fu.:.ly.

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:

5.QLQueryl .sql - MV .... versitatea (s.a (53))'


-ti X ueries for Lab05.sq!...iversitatea (sa (69})
·:..CREATE TABLE orarul. Id_Disciplina INT. Id Profesor INT, Id_ Grupa SMALLINT ,
2 Zi VARCHAR ( 50 Ora TIME Auditoriu Uff 1
121 %

@')'I Messages

There is already an obJect na~ed 'c~a~u:' in the databaee.

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:

Object Eltplurer .P X • Object Explorer Details -i:I X

Connect• ¥ ;,¥ ,._, , , c "' ,. ~ T C


- - - - - - -----
: t:: iiS LOCALDEV01 (5.QL Server 14.0.lO"v0.159 - .. LOCALDEVOl (SQL Server 14.0.1
Databa>es
., . 5.ys.tem Databa;es. Name
·:i- Database Snapshots System Tables
+ iii AdventureWorks.2017 FileTables.
- iii universitatea External Tables
,, Database Diagrams Graph Tables
Tables Im discipline
,<: System Tables Im grupe

: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.

6.1.2. lnstrucfiunile ALTER TABLE fi DROP TABLE


Uneori, apar situatii cand trebuie create noi tabele prin adaugarea coloanelor sau modificarea
structurii tabelului. Modificarea structurii unui tabel se face folosind instructiuni ALTER TABLE. Forma
instructiunii depinde de tipul modificarii aduse:

• ALTER TABLE <nume_tabel> <ACTIUNE> <descriere>,


;

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):

ALTER TABLE <nume tabel> ADD


:reat (<coloana> <tip_data> [DEFAULT <expr>] [, ... ]);
:arul
De exemplu, instructiunea de adaugare a coloanei nenule Bloc, de tipul CHAR, In tabelul orarul, se
scrie in felul urmator:

ALTER TABLE orarul ADD Bloc CHAR(l) NOT NULL;


Instructiunea SELECT, executata inainte ~i dupaALTER TABLE, afi~eaza schimbarile ce au avut loc
in tabelul orarul. Tabelele de sistem sysobjects ~i syscolumns contin metadate despre obiectele ~i
coloanele bazei de date In uz.
Sintaxa pentru modificarea unor coloane (schimbarea tipurilor de date, a dimensiunilor sau a
valorilor implicite ale acestora; schimbarea valorilor implicite afecteaza numai inserarile care succed
modificarea):

ALTER TABLE <nume tabel> ALTER COLUMN


(<coloana> <tip_data> [DEFAULT <expr>] [, ... ]);
Urmatorul exemplu modifica caracteristicile coloanei Zi din structura tabelului orarul:

ALTER TABLE orarul ALTER COLUMN Zi CHAR(2);


Crearea tabelelor ~i indeCifilor

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:

ALTER TABLE <nume_tabel> DROP COLUMN <coloana>;


De exemplu, ~tergerea coloanei Bloc din tabelul orarul se poate face cu instructiunea:

ALTER TABLE orarul DROP COLUMN Bloc;


Modificarea ~i dezvoltarea schemei unui tabel, care are doar coloane sunt simple, nu se refera la alte
obiecte ~i nu contin date. insa exista situatii cand este necesara modificarea tabelelor, deja, populate. in
acest caz, este important sa se tinut cont ca modificarea tipului de date, care, deseori, poate duce la o
pierderea permanenta de date in procesul convertirii datelor la alt tip. De asemenea, pot fi afectate in
cascada toate obiectele bazei de date care se refera la aceasta coloana ~i aplicatiile-client care apeleaza la
coloana data in mod direct sau indirect [36].
Exista o serie de constrangeri, cand nu este posibila modificarea coloanelor. In continuare, sunt
mentionate unele cazuri mai des intalnite:
• Coloana este de tip timestamp.
• 0 coloana calculata (COMPUTED) sau este utilizata de coloana calculata.
• 0 coloana utilizata intr-o constrangere cu PRIMARY KEY sau [FOREIGN KEY] REFERENCES,
sau CHECK, sau UNIQUE. Cu toate acestea, ultim.ele 2 permit modificarea lungimii coloanei
de lungime variabila.
• 0 coloana asociata constrangerii DEFA ULT. Cu toate acestea, este posibila modificarea
lungimii, preciziei sau scalei unei coloane daca tipul de date nu este modificat.
0 regula generala pentru toate coloanele denota ca tipul de date vechi trebuie sa fie implicit
convertibil ill tipul de date nou [8].
in cazul ill care se vrea ~tergerea sau modificarea unui tabel trebuie sa fim siguri de ceea ce se face,
deoarece nu se poate recupera ce s-a ~ters sau ce s-a modificat decat daca exista o copie de rezerva a
obiectului ~ters.
Un tabel poate fi ~ters, daca nu este nevoie de el un timp mai indelungat. ~tergerea fizica a cestuia,
inclusiv a inregistrarilor acestuia, se realizeaza prin comanda:

DROP TABLE <nume tabel>


Pentru ~tergerea continutului unui tabel ~i pastrarea schemei acestuia se poate utiliza instructiunea:

TRUNCATE TABLE <nume tabel>


Urmatorul exemplu va ~terge tot continutul tabelului orarul:

TRUNCATE TABLE orarul;


in continuare, se examineaza o instructiune, care recreeaza structura tabelului orarul Acesta posedA
o cheie primara, constrangeri NOT NULL ~i DEFAULT. Se analizeaza codul pas cu pas:
• Instructiunea USE universitatea indica sistemului sa utilizeze baza de date universitatea pentru
sesiunea de lucru curenta.
• Instructiunea GO este un separator de pachete implicit.
• Pe a treia linie pome~te instructiunea care apeleaza o functie nativa a sistemului MSSQL -
OBJECT_JD. Functia verifica daca, in catalogul de sistem, exista un tabel (parametru - 'U? cu
nume orarul ~i daca functia reu~e~te (conditie IF retumeaza valoarea adevarat), se executA
instructiunea DROP, care ~terge acest tabel.
• Liniile 5-12 cuprind instructiunea de creare a tabelului orarul Campurilor ld_Disciplina ~i
Bloc sunt atribuite cu constrangerea NOT NULL. Campului Bloc i se ofera o valoare implicit!
(DEFAULT). in tabelul dat, campurile Id_ Grupa, Zi, Ora ~i Auditoriu constituie cheie
primara.
Crearea tabelelor ~i indec#lor

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

6.2. Gestiunea indec:;ilor in Microsoft SQL Server Management Studio


Acum, se va trece la sarcina crearii indec~ilor, un mecanism informatic utilizat in bazele de date [4].
r::ES, Mai 'intai, e foarte important sa se cunoasca ce este un index. propriu-zis. Un index este o structura
ianei pe disc asociata tabelului sau viziunii pentru cautarea randurilor in tabel sau viziune. Indexul contine chei
construite pe una sau mai multe co Joane din tabel sau viziune. Aceste chei sunt pastrate intr-o structura (B-
;area arbore) care permite sistemului SQL Server sa gaseasca in mod rapid ~i eficient randul sau randurile
asociate valorii pe care a luat-o cheia.
plicit
6.2.1. Tipuri de indecfi utilizati in SQL Server 2017
Astfel, indexul este o structura legata de un tabel care are drept scop reducerea timpului de acces la
face,
inregistrarile tabelului. in SQL Server, se utilizeaza cateva tipuri de indec~i:
rva a
Clustered
stuia, Acest tip de index organizeaza fizic liniile tabelelor in acee~i ordine, ca ~i intra.rile in index. Este
tipul de index ideal, care nu implica multe actualizari in tabel, deoarece, pentru fiecare modificare a
continutului unui camp-cheie, tabelul este reorganizat. Fiecare tabel poate contine numai un index
de acest tip. Exista un singur caz cand liniile intr-un tabel sunt sortate lntr-o ordine - atunci cand
iea: tabelul contine un index de tip Clustered. Daca tabelul contine un index Clustered, tabelul este
numit - tabel clasterizat. Daca tabelul nu poseda acest index, atunci liniile acestui tabel reprezinta o
structura neordonata, care se nume~te heap.

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 ~ -

MCOTELEA.u niversitatea - dbo.oraru l -Jo X ueries for lab-05.s... Marian Cote

Connect • f "f Co lu mn Name Data Type Al low Nulls

- i3 LOCAL DEV01 (SQL Server 14.0.1000.1 ld_Disc iplin a int 0


Database> ld_Profesor int Pl
·•· System Databases
'II Id_ Grupa
.., Set Prirnary Ket
1.f Data base Snapshot s
iii univers itatea 'II Zi °'1 Insert Column

•:t1 Database Diagrams 'II Ora '§ Delete Column


Tables 'II Aud itori u
System Tables
Bloc
t. FileTabl es
.+. Externa l Ta bles
.+ Gra ph Ta bl es (D !,;ML Indexes ...
[fl mi dbo. di scipline Iii Check (Qnstraints ...
t mi dbo.g rupe
~ Sgatial Indexes ...
ff mi dbo.o rarul
,Je.:nercitt h,'lP Jf.: ~$'~Pp t
'i:! mi dbo. profesori
;. mi dbo.studenti ,,, Properties Alt+Enter

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"'"
''-'

Data Space Spec ificati on PRI MARY

fl,dd Qelete .(loS<e


Crearea tabelelor ~i indec~ilor

Proprietatile entitatii create sunt grupate pe categorii:


General
Daca aceasta categorie este expandata, sunt prezentate proprietatile Columns, Is Unique ~i
Type.
• Columns: prezinta ordinea coloanelor in cheie sau index ~i asigura accesul la o caseta de
dialog unde aceasta ordine poate fi definita. Pentru a afi~a caseta de dialog, se aplica un
click pe Columns, apoi pe butonul ( ... ),care apare in partea dreapta a cfunpului acestei
proprietati. in fereastra aparuta (Index Column), se face un click in cfunpul Colum
Name. Din meniul derulant aparut, se selecteaza cfunpul (cfunpurile) care va (vor) face
parte din index. in cazul nostru, se selecteaza cfunpurile Id_Disciplina, Id_Profesor.
Apoi se apasa butonul OK pentru confirmare.
• Is Unique: daca se dore~te crearea unui index de tip UNIQUE, se marcheaza caseta de
selectie Is Unique ~i apoi se alege una din optiunile disponibile. Aceasta este
indisponibila pentru indec~ii de tip XML.
• Type: specifica daca entitatea selectata in lista este o cheie UNIQUE, un index simplu
sau un index Columnstore. Pentru cheia primara, acest camp este numai de citire.
Identity
Daca aceasta categorie este expandata, sunt afi~ate proprietatile Name ~i Description.
• Name: prezinta Qumele cheii sau al indexului. AtuQ.ci cand este creata o entitate noua, se
atribuie un nume implicit bazat pe tabelul in fereastra activa in Table Designer. Numele
a din
poate fi modificat 'in orice moment.
, sau
:apta. • Description: ofera un loc pentru descrierea cheii sau indexului. Pentru a face o descriere
cazul mai detaliata, se aplica un click pe Description, apoi un click pe butonul ( ... ), care apare
ltatul in partea dreapta a cfunpului al acestei proprietati. Aceasta ofera o arie mai larga in care
tonul poate fi inserat textul.
Table Designer
:tarea Daca aceasta categorie este expandata, este prezentata informatia despre Create as Clustered.
ected
• Create as Clustered: face cheia sau indexul sa fie clusterizat. intr-un tabel, este permis
numai un index de tip Clustered Datele intr-un tabel sunt pastrate in ordinea indexului
de tip Clustered.
• Data Space Specification: daca aceasta optiune este expandata, sunt prezentate
informatiile despre (Data Space Type), Filegroup or Partition Scheme Name ~i
Partition Column List.
• (Data Space Type): indica daca acest index sau cheie se refera la grupul de fi~iere
sau schema de partitie.
• Filegroup or Partition Scheme Name: prezinta numele grupului de fi~iere sau al
schemei de partitie pe care este pastrat.
• Partition Column List: afi~eaza lista de coloane separate prin virgula, care participa
la functia de partitie a coloanelor. Indisponibila, daca in cfunpul (Data Space Type)
este selectata optiunea Filegroup.
• Fill Specification: daca aceasta optiune este expandata, sunt ,prezentate informatiile
despre Fill Factor ~i Pad Index.
• Fill Factor este, de fapt, utilizata pentru a lasa un spatiu liber in cadrul paginii, cu
scopul de a permite ca modificarile sau adaugarile ulterioare ale liniilor tabelului sa
gaseasca spatiu intr-o pagina. Fill factor este o valoare intre 0 ~i 100.
Valoarea 100 semnifica ca pagina va fi plina. Se va necesita eel mai mic spatiu de
memorie. Aceasta optiune se recomanda sii fie utilizata atunci cand datele nu vor fi
actualizate, de exemplu, in tabele numai pentru citire.
0 valoare mai mica lasa mai mult spatiu liber in paginile cu date. Aceasta optiune
reduce necesitatea de divizare a paginilor cu date atunci cand indec~ii cresc, dar
necesitii mai mult spatiu de pastrare.
Crearea tabelelor ~i indec~ilor

• 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.

6.2.3. Crearea indecfilor, pornind de la crearea tabe/e/or


Procedura pentru crearea unui index lntr-un tabel nou nu se deosebe~te mult de crearea unui index
asupra unui tabel existent. Procesul crelirii indexului este urmatorul:
1. in arborele Object Explorer se extinde dosarul bazei de date, unde va fi creat indexul
2. Seda un click cu butonul drept al mouse-ului pe dosarul Tables.
3. in meniul de context, se face un click pe optiunea New Table.
4. Se completeaza structura tabelului.
5. Se face un click pe butonul Save ~i se insereaza numele tabelului in caseta de dialog ce a
aparut, ~i apoi se confirma introducerea (OK).
6. Ramane sa se procedeze in acel~i mod ca in cazul anterior, pornind de la pasul 7.

6.2.4. Modificarea indecfilor


Pentru modificarea unui index, instrumentele visual din SQL Server Management Studio pot fi
utilizate prin doua metode.
Prima metoda consta in modificarea indec~ilor, utilizand interfata de proiectare a tabelelor descrisa
in sectiunea 6.3.2. Din Object Explorer se acceseaza tabelul unde se afla indexul necesar ~i se modifica
proprietatile lui in fereastra Indexes/Keys. Pentru salvarea setlirilor noi ale indexului in fereastra
Indexes/Keys, se aplica un click pe butonul Close ~i apoi dupa ce controlul se va intoarce ferestrei cu
structura tabelului, pentru salvarea modificarilor in structura indexului se apasa butonul Save de pe bara
de instrumente.
Crearea tabe/e/or ~i indec~ilor

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 ...

di 6.3. Gestiunea indec,ilor in limbaju/ Transact-SQL


al
6.3.1. Crearea indecfilor
st in figura de mai jos, se var examina doua exemple de creare a indec~ilor: primul fiind mai simplu,
le iar al doilea un pie mai avansat.

!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 % •

mi Results ~'i Messages


1ndex_name
•............................................................. .. ........... . . index_description index_keys
fi t< _orarul
•.......... ................................................................. ,
nonclustered . unique located on PRIMARY ld_Disciplina. ld_Profesor
ix_oraru! _bloc nonclustered located on PRIMARY Bloc
PK_orarul_ 5FD E5EBD..!..43C D:1BE clustered . unique. pnmarykey located on PRI M,.!..RY Id_Grupa , Zi. Ora, Al..ldrtoriu
a
a
a Pe a treia linie, porne~te instructiunea care verifica, in catalogul de sistem, daca exista un index cu
u numele IX_orarul asociat tabelului orarul ~i, daca il gase~te, ii ~terge. Linia a cincea de cod creeaza un
1a index ix_orarul asupra tabelului orarul. Indexul cuprinde doua coloane.
Crearea tabelelor # indec~ilor

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.

CREATE UNIQUE INDEX ix_grupe_Cod_Grupa


ON grupe(Cod_Grupa ASC) ON userdatafgroupl
Clauza UNIQUE INDEX impune activarea constrangerii UNIQ UE pe coloana Cod_grupa.

6.3.2. Modificarea indec:jilor


Deseori poate aparea necesitatea de reconstruire a indec~ilor sau de modificare a proprietatilor
acestora. Mai jos, sunt prezentate cateva exemple de modificare ~i refacere a indec~ilor in limbajul
Transact-SQL.
Exemplul de maijos reconstruie~te indexul ix_orarul din tabelul orarul:

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;

6.3.3. Vizualizarea indec:jilor


Pentru vizualizarea indec~ilor existenti asociati de un tabel, se utilizeaza procedura stocata
sp_helpindex. Ea realizeaza o cautare mtabelul sistcmului sys.indexes. Aceasta procedura trebuie sa fie
executata in Editorul de Interogari Transact-SQL, precum e prezentat in figura ce urmeaza:
Crearea tabelelor ~i indeqilor

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

sistemul index_name index_description index_keys


:····· ···· ······· ······· ················· ········· ····· ···:
tate este 1 :... ~~-~P.~::E.?.?.:::~.~P.~ ....J nonclustered. unique located on userdatafgroup 1 Cod_Grupa
2 PK_grupe clustered, unique. primar/ key located on PR IMARY Id_Grupa
verifica
Evitand
cu astfel
6.4. lnstructiunile
, de actualizare a bazei de date
ferite de Limbajul Transact-SQL propune trei instructiuni ce corespund celor trei operatii de actualizare a
explicita bazei de date: inserarea (INSERT), suprimarea (DELETE) ~i modificarea (UPDATE). Toate aceste trei
operatii se aplica asupra tabelelor (fizice sau virtuale) ~i actualizarea se petrece la nivel de linie de tabel.

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

Se examineaza exemplul urmator:

~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 )

• Prima instructiune creeaza un tabel-test numit orarul_grupa cu coloanele Id_Disciplina,


Cod_ Grupa, Zi, Ora, Auditoriu ~i Bloc.
• Instructiunea a doua insereaza o 1nregistrare (linie), populand doar campurile ld_Disciplina,
Cod_grupa ~i Ora.
• Instructiunea a treia insereaza o 1nregistrare numai cu valori implicite, definite in structura
tabelului. Adica toate campurile in afara de campul Bloc vor putea contine valoarea NULL, iar
campul Bloc= 'B ', deoarece 'B' este o valoare predefinita.
• ~i ultima instructiune insereaza o 1nregistrare, livrand valori pentru toate campurile. Ce se
intampla, cand nu sunt specificate denumirile campurilor? in acest caz, SQL insereaza valorile
In campuri 'in ordinea ill care acestea au fast descrise J:n structura tabelului.
Sa se examineze acum urmatoarea interogare asupra tabelului in cauza:

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

.. SQJ..Query2.sql - MV •.•versitatea (sa (71})"


i - DROP TAB LE IF EXIST S oraru l _grupa
SQLQuery1. sql - MV .... versitatea (sa (62))' -.. X queiies for Lab65.sq!...iversitatea (sa (61)}*

3 - CREATE TAB LE orarul_grupa ( Id_Disciplina INT, Cod_Grupa CHAR' 6 ; , Zi CHAR' 2 '.


-"
J
Ora TIME , Audi toriu INT. Bloc CHAR ( 1
CHECK i Bl oc -;_ . 'A'. 'B' , 'C' ' DEFAULT '.B' '
\
7 INSERT oraru l _grupa VAL UES 105 , 'C I8 1.71 ', 'Lu' , '08 : 00 ' , 20 2 , 'B' ' ;
INSE RT oraru l _grup a VALU ES 107 'CIB171' 'Lu' , '11: 30' , 50 1 , 'B' ·
INSERT oraru l_gt'upa VALUES 1112 . ' IN F171 ' , 'Lu' . ' 11: 30 ' , 501 , 'D '
SE LECT " FROM orarul_grupa ,
121 % •

Iii Results [§'Iii Messages

~ 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 ());

INSERT INTO orarul_grupa , Id_Disciplina VALUES 100 ,;


INSERT INTO orarul~grupa · rd_Dis c iplina VALUES 101 •
)narea
SELECT !=ROM orarul_grupa :
121 % •

ml Results @')'i Messages


ld_Disciplina Cod_Grupa Zi Ora Aud~oriu Bloc ld_Orarul_Grupa Data_inserare
1G5 CIB1 71 Lu !lll:OO:OO.rnHY'uOOO 202 B 1 2018-01-27 15:17:5!l503
107 CIB1 71 Lu 11: JO:ll!L 0000000 501 B 2 2018-01-271517:59.503
3 100 NULL NULL NULL NULL B 3 201!! "1-2715:1759.507
4 101 NULL NULL NULL NULL B 4 201H-01-27 15:17:59.5ll7
Crearea tabelelor ~i indeqilor

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:

INSERT INTO orarul CIB171


(SELECT * FROM orarul WHERE Id_Grupa=l);
in cazul in care coloanele celor doua tabele au acee~i specificare, definirea listei de coloane in
instructiunea INSERT este optionala.

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:

UPDATE <nume tabel>


SET <coloanal> = <expresiel> [,<coloana2> = <expresie2>, ... ]
[WHERE <criteriu_de_modificare>];
Formatul fundamental al unei instructiuni UPDATE este alcatuit din patru componente:
• <nume tabel> - reprezinta denumirea tabelului in care se va realiza instructiunea de
modificare;
• (<coloanal > [, <coloana2> .. . ]) - sunt coloane ale tabelului specificat;
• (<expresiel > [, <expresie2> ... ]) - sunt valorile corespunzatoare coloanelor;
• <criteriu_de_modi.fieare> - conditia de filtrare care determina liniile ce urmeaza a fi
actualizate.
Exista doua posibilitati de modificare. Una consta in furnizarea, in mod explicit, a fiecarei valori
pentru coloanele care trebuie modificate, iar cealalta posibilitate consta in obtinerea valorilor in urma unei
interogari SELECT.
Folosind prima posibilitate, clauza SET atribuie coloanei valoarea specificata. Cand se modificli
coloane multiple, se folose~te o singura comanda SET, iar fiecare pereche <coloana> = <expresie> este
separata de urmatoarea printr-o virgula.
Clauza WHERE impune ca actualizarea valorilor coloanelor sa se efectueze numai asupra acelor
linii care indeplinesc conditia data. Daca este omisa clauza WHERE, atunci vor fi modificate valorile
coloanelor din toate liniile tabelului.
Crearea tabelelor # indecfilor

in calitate de exemplu de studiu va fi luat acela~i tabel orarul_grupa ~i se presupune ca toate


Jectiile, unde ziua era necunoscuta vor avea loc marti. Atunci instructiunea va avea urmatoarea structura ~i
mm!torul rezultat:

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

105 CIB171 :. u 08 : 00 : 00 . 0000000 B


107 CIB171 :.u 11 :3 0 : 00 . 0000000 B
100 NULL Ma tIDLL B
101 Nu:...:., Ha B

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

Id Discipl1na Ced Gru;;a Z.:_ Ora Bloc

lQS CIB171 :.u 38 : 00 : 00 . 0000GGQ A


10 7 CI E-1 71 _ ;i.;. 11:30:00.0000000 A
11 0 NU::. Ma NULL
101 NU:.: Ma NULL

(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:

DELETE [FROM] <nume tabel>


[WHERE <criteriu_de_$tergere>];
unde
• <nume tabel> - reprezinta denumirea tabelului in care se va realiza operatia de ~tergere;
• <criteriu_de_Jtergere> - este o expresie logica, in care intervin valorile unor coloane ale
tabelului.
Folosirea clauzei WHERE determina ~tergerea acelor linii care indeplinesc conditia impusa. in
aceasta clauza, pot fi folosite ~i subcereri. Daca nu este specificata nicio conditie, se ~terg toate liniile
tabelului.
Astfel, instructiunea DELETE este destul de simpla:

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 %

!El Results @ill Messages


Cod_Grupa Zi Ora Auditoriu Bloc Id_Orarul_Grupa Data _inserare
CIB171 Lu {lB:OO:G!Hl-OOOfrOO 2!!2. A 1 2018-01-27 15:25:117.373
2 CI B1 71 Lu 11 3-0 :fiG ODOOlH}D 5-01 A 2 24118--01-27 15:25:47.373

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

Datele necesare pentru inserare trebuie sa fie colectate cu ajutorul instructiunii/instructiunilor


SELECT ~i introduse in tabelul-destinatie, ~tiind ca:
lectie #1 (Ora ='08:00', Disciplina = 'Structuri de date si algoritmi', Profesor ='Bivol Ion')
lectie #2 (Ora ='11 :30', Disciplina = 'Programe aplicative', Profesor ='Mircea Sorin')
lectie #3 (Ora ='13:00', Disciplina ='Baze de date', Profesor = 'Micu Elena')
8. Sa se scrie interogarile de creare a indec~ilor asupra tabelelor din baza de date universitatea
pentru a asigura o performanta sporita la executarea interogarilor SELECT din Lucrarea
practica 4. Rezultatele optimizarii sa fie analizate in baza planurilor de executie, pana la ~i
dupa crearea indec~ilor.
Indec~ii nou-creati sa fie plasati fizic in grupul de fi~iere userdatafgroupl (Crearea $i
intrefinerea bazei de date - sectiunea 2.2.2)
Diagrame, scheme# sinonime

7. DIAGRAME, SCHEME $1 SINONIME


in capitol se trateaza subiectele cu privire la crearea diagramelor ~i modificarea formelor de
l vizualizare ale acestora, setarea legaturilor dintre tabele, gestionarea ~i editarea obiectelor bazei de date,
a folosind diagramele. in afara de aceasta, sunt examinate aspectele de creare, modificare ~i suprimare a
;i schemelor, de deplasare a obiectelor intre scheme, de interogare a schemelor, precum ~i de creare ~i
suprimare a sinonimelor [2].

7.1. Diagramele in baza de date SQL Server


Diagramele bazei de date reprezinta tabelele din baza de date in mod grafic. Diagramele afi~eaza
denumirile coloanelor continute in tabele, legaturile dintre tabele, indec~ii ~i constrangerile asociate
tabelelor.
Diagramele bazei de date pot ft folosite pentru:
• Vizualizarea structurii tabelelor bazei de date ~i a legaturilor dintre tabele.
• Modiftcarea structurii bazei de date.
• Crearea tabelelor noi, indec~ilor, referintelor ~i altor constrangeri.
• Furnizarea diferitelor vizualizari ale bazelor de date complexe.
• Manipularea obiectelor bazei de date, fiira a scrie coduri in Transact-SQL.

7.1.1. Crearea diagramelor


Pentru crearea diagramei unei haze de date, se executa urmatorii p~i:

1. Se initializeaza Microsoft SQL Server Management Studio.


2. Se extinde un grup de servere (daca exista grupare) ~i apoi se extinde un server.
3. Se extinde dosarul Databases ~i se extinde baza de date pentru care se dore~te construirea unei
diagrame.
4. Se face un click cu butonul drept al mouse-ului pe dosarul Database Diagrams.
3. in meniul de context, care s-a deschis, se selecteaza opfiunea New Database Diagram. in
calitate de exemplu, este folosita baza de date universitatea creata in laboratoarele precedente.
6. in fereastra aparuta, intitulata Add Table, sunt selectate tabelele care trebuie sa faca parte din
diagrama noua. in campul de lucru (Tables) al acestei ferestre, este afi~ata lista tabelelor
disponibile pentru crearea diagramei. Tabelele destinate sa intre printre cele ce vor constitui
diagrama sunt selectate cate unul, cand se da un click asupra butonului Add. in mod automat,
tabelul este transportat In aria de lucru a diagramei. Cand sunt mai multe tabele, pot ft
manipulate In grup, utilizand butoanele Shift ~i Ctrl. in cazul in care in diagrama sunt incluse
toate tabelele necesare, se face un click pe butonul Close.
Se adauga tabelele studenti ~i studenti_reusita. in urma acestor actiuni, pe ecranul calculatorului,
va fi prezentata urmatoarea diagrama alcatuita din 2 tabele:
Sa se observe ca tabelele din diagrama, deja, sunt legate intre ele prin anumite conexiuni. Odata
construita, diagrama trebuie salvata. Pentru aceasta, se face un click pe butonul Save, iii , urmat de
introducerea numelui diagramei in caseta care a aparut. in cazul nostru, se va insera numele
Diagrama_ universitateal.
Diagrame, scheme# sinonime

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 ...

7. 1.2. Editarea diagramelor


Diagramele create pot fi modificate, adica obiectele din ele pot fi editate sau ~terse in mod manual.
Aici, iar~i, vor fi folosite tabelele create in capitolul 3. Pentru editarea diagramei
Diagrama_ universitateal, se procedeaza in urmatorul mod:

1. Se extinde dosarul Databases -> universitatea -> Database Diagrams.


2. Se face un dublu click pe pictograma Diagrama_universitateal. in consecintA, in campul de
lucru, se extinde fila cu diagrama respectiva.

discipline """""'""'...,, studenti_reusita profesori . .


)] ld_Disciplina )] ld_5tudent 'l] ld_Profesor
Disciplina )] ld_Di sciplina Nume_Profern r
Nr_ ore:_plan_disciplina )] ld_Profe:sor Pre:nume_Profesor
)] Id_ Grupa Adresa_Po stala_Profr:S.or
)] Tip_Evaluare
studenti
Nata
'l] Id Student
Data_Evaluare grl!p_e
Nurne_Student )] Id_ Grupa
Prenume_Student Cod_Grupa
Data_Na stere_5tudent Specialitate
Ad resa_P oc,ta Ia_5tud ent Nume_Facultate

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

• Tables and Columns

Selectec' Relati on!;hip name:


: rfiZi ;~H1·N1.'1t-~d-ii-bJJ-,~t1-fil i
irill be
nanual. Foreign key table:
Primary key table:
lgramei
grupe v ~tudenti_reu ~ita

Id_Grupa Id_ Gru pa

rrpul de

l _ I

OK Cancel eel

or

7. in aceasta fereastra, SGBD-ul cere confirmarea legaturii. Este posibila modificarea


tabelelor - surselor cheilor primare ~i schimbarea atributelor de referinta. Apoi se apasa
butonul OK.
8. Apoi devine accesibila fereastra Foreign key relationship, in care se editeaza proprietatile
extinse ale legaturii nou-create. 0 legatura include urmatoarele proprietati:

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

Foreign Key Relationship


de cheie
~elected Relationship:
ara (sau Editing properties for new relationship. The 'Table> And Column~ Specification'
property needs to be filled in before the new relationship wi ll be accepted,

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;.,'.,.;.""'""••·••• :; ••-~

::nt .-7 l:. .............................................................................


1d_Grupa f
: ale
plina Cod_ Grupa mu

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

• Optiunea Custom prezinta coloanele tabelului numai cu proprietatile definite de utilizator. in


figura ce urmeaza, sunt prezentate doar proprietatile Column Name, Condensed Type,
Nullable:

~ ·
!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.

ire Nume_Facult.. . varchar(255) lfes

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 ..

7.2. Administrarea scheme/or


in cheia Utilizarea schemelor ofera mai multe avantaje pentru simplificarea procesului de gestiune a datelor
~i permite crearea suhmultimilor de ohiecte care pot fi administrate ca un tot intreg. Schemele pot fi
utilizate pentru limitarea obiectelor vizibile (accesibile) pentru un utilizator sau un grup de utilizatori, fapt
ce permite o partajare mai simpla a accesului la haza de date. Cativa utilizatori pot detine o schema fiind
membri ai unui grup de utilizatori din Windows. 0 schema poate fi definita una implicita pentru unu sau
mai multi utilizatori.
Schemele sunt ni~te containere de ohiecte utilizate pentru definirea spatiilor de nume (namespaces)
ale obiectelor bazei de date. Schemele se afla in corpul unei haze de date. 0 baza de date poate avea mai
multe scheme.
0 schema poate contine un numar de ohiecte limitat de numarul de ohiecte ce poate maximal
susiine o baza de date gestionata de SQL Server. Ca rezultat, se formeaza o ierarhie logica de organizare a
datelor: Baza de Date-> Schema-> Obiectele schemei (Tabele, Viziuni etc.).
0 schema nu poate contine in corpul sau alte scheme. 0 schema nu poate contine in corpul sau
obiecte cu nume duplicat.
Diagrame, scheme# sinonime

7.2.1. Crearea scheme/or in mediul SQL Server Management Studio


Pentru crearea schemei noi cu ajutorul SQL Server Management Studio, trebuie sa fie executati
urmatorii pru,;i:
1. Se conecteaza serverul unde se afla baza de date necesara.
2. Pe panelul Object Explorer se expandeaza dosarul Databases (se face un click pe semnul ,,+"
al dosarului Databases).
3. Se face un click pe semnul ,,+" langa baza de date necesara.
4. in arborele de obiecte aparut, se expandeaza dosarul Security.
5. in dosarul Security, se face un clic-drept pe dosarul Schemas.

Aij Schema - New


Select a page
!J Script • i) Help
}# General
}# Permissions
}# Extended Properties A schema contains database objects. such as tables. views. and stored procedures . A schema owner
can be a database user. a database role . or application role .

~chema name:

schema_universttatea 1

Sg_hema owner:

Ion Sea[Ch ..

Connection
Server:
MV
Connection:
sa

yif View connection properties

Progress
Ready

OK Cancel

6. in meniul de context aparut, se alege optiunea New Schema ...


in acest punct, pe ecranul calculatorului, va aparea fereastra de dialog (Schema - New), unde
se vor defini proprietatile schemei preconizate:
7. Pe pagina General in campul Schema name se scrie numele schemei, iar in campul Schema
owner se define~te proprietarul acesteia.
8. Pentru cautarea conturilor utilizatorilor care pot primi rolul de proprietari ai schemei, se apasa
butonul Search. Va aparea o fereastra de dialog Search Roles and Users ~i in aceasta fereastra
se apasa butonul Browse pentru a deschide fereastra urmatoare Browse for Objectcts.
9. in fereastra Browse for Objectcts, se alege un rol sau un utilizator care va fi proprietarul
schemei, apoi se confirma obiectul ales prin apasarea butonului OK.
Diagrame, scheme# sinonime

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:

Browse f or Objects . . bject Types ...

15 ob1ects were found matching the types you selected.

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.

7.2.2. Crearea scheme/or in limbajul Transact-SQL


Atunci cand se creeaza o schema, folosind instructiunile Transact-SQL, aceasta se va gasi in baza
de date curenta. Pentru crearea schemelor prin cod, se utilizeaza instructiunea CREATE SCHEMA . Sintaxa
de baza a instructiunii este:

CREATE SCHEMA clauza - nume- schema <element schema> [ ... n] ]


clauza nume schema> : :=
{ nume_schema
I AUTHORIZATION nume_detinator
I nume_schema AUTHORIZATION nume_detinator }
< element schema > : : =
{ definitie_tabel I definitie_viziune I acordare_drept
unde revocare_drept I interzicere_drept}
Precum se vede, sintaxa instructiunii de creare a schemei in afara de numele ~i proprietarul acesteia,
iema poate include clauze de creare a tabelelor sau viziunilor, de definire a permiselor de acces pentru un
utilizator sau un grup de utilizatori.
apasa Urmatorul exemplu creeaza o schema cu numele schema_universitatea2 ~i proprietarul schemei
~astra Jon. Schema mai contine instructiunea de creare a tabelului orarul_grupa. Tot aici, utilizatorului A nna ii
este acordata permisiunea de selectare a datelor din aceasta schema, iar utilizatorului Vasile i se interzice
aceasta operatiune. Atat schema, cat ~i tabelul sunt create in cadrul unei singure instructiuni.
etarul
Diagrame, scheme# sinonime

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

7.2.3. Modificarea scheme/or


Periodic, poate aparea necesitatea de oferire a schemei unui proprietar nou, de modificare
permiselor de acces unor sau altor utilizatori.
Pentru modificarea proprietarului schemei cu ajutorul SQL Server Management Studio, se execut
urmatoarea consecutivitate de operatiuni:
1. Se parcurge calea 1-5 mentionata in sectiunea anterioara ( Crearea scheme/or).
2. Se expandeaza dosarul Schemas ~i se face un click-drept pe schema care trebuie modificata.
3. Din meniul de context aparut se alege Properties.
in rezultat apare fereastra Schema properties cu interfata deja cunoscuta. Pentru a modific
proprietarul schemei, se executa o serie de p~i identici operatiunilor de definire
proprietarului descri~i anterior.

r-.'i Schem a Properties - schema_universitatea2 - Cl . .

Seledapage
rJ Scnpt ... Help
JI General
JI Permissions
JI Extended Properties Qatabase : urnversrtatea

Vif:Nl database: oerm1ss1ons

Schema name : schema_universrtatea2

].!sers or roles: S~arch ..

Name Type
, . . . . . . . . .... ... .... .. .. .. .. ... ................ .......................................................................................................... .... '
~ .Arna User
~ Vasile User

Connection

Server: fermissions for .Anna :


MV
Explicrt Effective
Connection:
Permission Grant or Grant Wrth Grant Deny
sa
r·1
"
'fl View cc•nnection Droperties
Delet e [] [J
Execute 0 u
Insert L.J
References

Pr~ Select "


L..._j

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.

7.2.4. Deplasarea obiectelor in scheme cu ajutorul SQL Management Studio


Deoarece schemele sunt ni~te containere de obiecte, exista posibilitatea deplasarii obiectelor dintr-o
schema 1n alta. Deplasarea obiectelor este posibila numai ill cadrul unei haze de date. Perrnutarea
obiectelor modifica ~i pennisiunile de acces ale utilizatorilor la aceste obiecte. Toate drepturile de acces
anterioare sunt suprimate. Daca proprietarul obiectului deplasat este un utilizator sau un rol defmite
explicit, atunci ace~tia ~i ill continuare vor fi proprietarii acestui obiect.
Pentru deplasarea unui obiect illtr-o schema noua cu ajutorul SQL Management Studio, se parcurge
urmatoarea cale:
I . Conectarea la serverul unde se afla baza de date necesara.
2. Pe panelul Object Explorer, se expandeazii dosarul Databases.
3. Se face un click pe semnul ,,+" langa baza de date respectiva, pentru a afi~a arborele de
obiecte.
4. in arborele de obiecte, se selecteaza obiectul cautat, fie un tabel sau o viziune.
5. Se face un click- drept pe acest obiect ~i
1n meniul de context se alege Design.
6. Pe panelul Properties, 1n sectiunea Identity se alege meniul derulant Schema, unde se
selecteaza schema noua. Daca panelul Properties nu este afi~at 1n campul de lucru, el poate fi
chemat, apasand tasta F4.

.. q. X MV.ur1iversitatea ~ .,.itatea2.oi:aru!_grupa .., X :: Properties


Column Name Data Type Allow Nulls fTbij scherna_universitatea2.orarul_grupa
' ~ ld_Disciplina int ~
Cod_ Grupa char(6) ~ El (Identity)
Z.i char(Z) ~ (Name) orarul_grupa
Ora time(7) ~
Description
Auditoriu int ~
•·"'·' ·· - - schema_universitatea2 "
Bloc char(l ) f.'.t] )er.tr f.;ame
c El Table Designer
Identity Column

Lock Escalation Table


1±1 Regular Data Space Sp• userdatafgroup1
;,e:p!:c ati::ci rJc

Text/Image Filegmup userdatafgroup 1


Diagrame, scheme §i sinonime

7. Dupii modificiirile necesare, se apasii butonul Save de pe hara de instrumente.


La deplasarea obiectului maltii schema, trebuie sii se tina cont de alte obiecte cu care acesta se
afla mdependenta. Pentru vizionarea dependentelor obiectului, mObject Explorer se face un
click-drept pe obiectul respectiv ~i din meniul de context se alege View Dependencies. in
fereastra apiirutii Object Dependencies, sunt vizualizate toate legaturile obiectului respectiv.

7.2.5. Deplasarea obiectelor cu ajutorul limbajului Transact-SQL


Pentru transferarea obiectelor cu ajutorul limbajului Transact-SQL, se executii instructiunea ALTER
SCHEMA. Sintaxa generala a instructiunii este urmatoarea:

ALTER SCHEMA schema_destinatie


TRANSFER schema_sursa.nume_obiect_deplasat
Mai jos, este prezentat un exemplu de instructiune, unde tabelul discipline este transferat din schema dbo
in schema universitateal.

USE universitatea;
GO
ALTER SCHEMA schema universitateal TRANSFER dbo.discipline;
GO

7.2.6. lnterogarea scheme/or


La crearea unui utilizator, acestuia i se asociaza o schema implicitli, care este utilizata de server
pentru procesarea numelor de obiecte definite incomplet. La adresarea catre obiectele din cadrul schemei
implicite, numele schemei poate fi omis. Pentru a se adresa obiectelor din alta schema, este necesarli
utilizarea unui identificator constituit din 2 sau 3 pfu1i. in SQL Server schema implicita pentru utilizatorii
noi este dbo . In continuare, sunt prezentate exemple de utilizare a instructiunii SELECT, care utilizeaza
doua scheme.
Interogarea ce urmeaza afi~eaza lista de discipline, tipul de evaluare ~i data cand a avut loc
evaluare. Tabelele interogate se afla mscheme diferite.

SELECT DISTINCT schema_universitateal.discipline.Disciplina,


dbo.studenti_reusita.Tip_Evaluare,
dbo.studenti reusita.Data Evaluare
FROM schema_universitateal.discipline JOIN dbo.studenti_reusita
ON schema_universitateal.discipline.Id_Disciplina =
dbo.studenti_reusita.Id_Disciplina
Interogarea de mai jos este similara celei anterioare. Deoarece interogarea este scrisa din numele
utilizatorului Ion, pentru care schema schema_universitateal este implicitli, obiectele ce apartin acestei
scheme pot fi redate m forma prescurtata.

SELECT DISTINCT discipline.Disciplina,


dbo.studenti_reusita.Tip_Evaluare,
dbo.studenti - reusita.Data - Evaluare
FROM discipline JOIN dbo.studenti_reusita
ON discipline.Id_Disciplina = dbo.studenti_reusita.Id_Disciplina
intr-o baza de date SQL Server, pot exista tabele sau alte obiecte cu acel~i nume cu conditia ca acestea
apartin unor scheme diferite. in cazul dat, adresarea ciitre aceste tabele trebuie sa fie in mod explicit pentru
a evita ambiguitatea mtratarea interogiirilor.

7.2. 7. $tergerea scheme/or


inainte de a ~terge o schema, este important sa fie deplasate sau ~terse obiectele incluse. Tentativa
de a ~terge o schema care contine obiecte se va termina cu e~ec.
Diagrame, scheme# sinonime

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:

DROP SCHEMA <nume schema>

7.3. Crearea fi suprimarea sinonimelor


nadbo
7.3.1. Ce este un sinonim?
Un sinonim este un obiect al bazei de date care serve~te pentru urmatoarele scopuri:
• Ofera un nume altemativ pentru un obiect din baza de date. La sinonim care se face referire ca
la numele unui obiect de baza, care poate exista pe un server local sau pe un server indepartat.
• Ofera un nivel de abstractizare care protejeaza o aplicatie-client de modificarile ce pot fi tacute
asupra numelor obiectelor de baza sau locatiilor acestora.
Sinonimele pot fi utilizate in interogari sau proceduri stocate in lac de numele originale ale
server obiectelor compuse din 2, 3 sau 4 paqi. De exemplu, este nevoie sa se execute o interogare catre un obiect
chemei stocat pe alt server. Atunci pentru accesarea acestui obiect, este necesar sa se scrie numele Jui explicit
ecesar3'. Nume_server.Nume_baza_de_date.Nume_schema.Nume_Obiect. Utiliziind un sinonim creat t:n schema
izatorii curenta, obiectul poate fi accesat doar specificand sinonimul respectiv.
ilizeaza Un sinonim apartine unei scheme, ca ~i alte obiecte ale schemei. Numele unui sinonim trebuie sa fie
unic. Un sinonim poate fi creat pentru urmatoarele obiecte din baza de date: tabelele definite de utilizator
vut lac (inclusiv tabelele temporare atat locale, cat ~i globale), viziuni,proceduri stocate,funcfii.
Un sinonim nu poate fi obiect de baza pentru un alt sinonim, ~i un sinonim nu poate referi o functie
de agregare definita de utilizator.
Doar numele unui sinonim executa legatura intre acesta ~i obiectul lui de baza. Existenta, tipul ~i
verificarea drepturilor de acces catre obiectul de baza sunt amanate pana la rulare. Prin urmare, obiectul de
bazA poate fi modificat, suprimat sau ~ters ~i inlocuit cu un alt obiect, care are acel~i nume ca ~i obiectul
de baza original.
De exemplu, se considera un sinonim, ore, care face referire la dbo.orarul_grupa t:n baza de date
numele universitatea. Daca tabelul dbo.orarul_grupa este ~ters ~i inlocuit cu o viziune numita dbo.orarul_grupa ,
acestei atunci ore acum se refera la viziunea dbo.orarul_grupa .

7.3.2. Crearea sinonimelor in SQL Management Studio


Pentru crearea sinonimelor, se executa urmatorii p~i:
1. Conectarea la serverul unde se afla baza de date necesara.
2. Pe panelul Object Explorer, se expandeaza dosarul Databases.
3. Se expandeaza baza de date necesara.
acestea 4. Se face un click-drept pe dosarul Synonyms;
.t pentru 5. in meniul de context aparut se alege optiunea New Synonym ...
in acest punct, pe ecranul calculatorului, va fi prezentata o fereastra de dialog New Synonym
similara celei de mai jos:

'entativa
Diagrame, scheme §i sinonime

New Synonym ;_-- c;-. .. 1


Select ,a page -~ · ~
!J Script ... ' Help
I- General
I- Perrrnssions
I- Extended Properties _2yno11ym name:

Synonym schema :

Seryer name :

.Qatabase name:

Scb.ema:

Object type :

Qbject name: v

Connection
Server:
MV
Connection :
MV'rnarian

if View connection properties

' Progress
Read1·

OK Cancel

In fereastra New Synonym pe pagina General, se completeaza urmatoarele campuri:


• Synonym name - se scrie numele sinonimului.
• Synonym schema - se scrie schema in care sinonimul nou va ft lncorporat.
• Server name - se scrie numele instantei de server respectiv.
• Database name - se scrie sau se alege din meniul derulant baza de date ce contine
obiectul.
• Schema - se scrie sau se selecteaza din meniul derulant schema ce contine obiectul de
baza.
• Object type - se selecteaza din meniul derulant tipul obiectului.
• Object name - se scrie sau se alege din meniul derulant obiectul de baza la care se refera
sinonimul.
Daca campurile Synonym schema ~i Server name raman nepopulate, atunci, pentru
utilizatorul curent, sistemul ia mconsideratie parametrii impliciti.
6. Dupa ce toate modificarile necesare sunt setate, se apasa butonul OK.

7.3.3. Crearea sinonimelor in limbajul Transct-SQL


Pentru crearea unui sinonim In limbajul Transct-SQL, se utilizeaza urmatoarea sintaxa generala:

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;

7.3.4. $1ergerea sinonimelor


Pentru a ~terge un sinonim, folosind interfata SQL Management Studio, se parcurge urmatoarea
cale:
1. Conectarea serverului, unde se afla baza de date necesara.
2. Pe panelul Object Explorer, se expandeaza dosarul Databases.
3. Se expandeaza baza de date necesara.
4. Se expandeaza dosarul Synonyms.
5. Se face un click-drept pe pictograma sinonimului preconizat spre ~tergere, in meniul de
context aparut se alege optiunea Delete.
6. in rezultat, apare o fereastra de dialog deja cunoscuta - Delete Object, unde pentru a confirma
~tergerea schemei se apasa butonul OK.
ime
Interogarea Transact-SQL de ~tergere a unei scheme are urmatoarea forma generala:
. de
DROP SYNONYM [ schema. ] nume_sinonim
Numele schemei nu intotdeauna este un parametru obligatoriu. Daca acesta este omis, atunci SQL
fer a Server utilizeaza implicit schema fixata utilizatorului curent.
Pentru a modifica un sinonim existent, se ~terge eel vechi ~i se creeaza unul nou cu proprietatile
1tru
dezirabile.

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

SELECT FROM ##dis ciplina_eva l uare_grupa


- -L!.
DROP TABLE ##disciplina_e valuare_grupa .
121% •

1111 Resu!s lll'I Messages


Clsaphna Tip_Evaluare Data Grupa

l!:°'.~".'.bl~reSld.ei>~~~re~~ ~ Examen 2018--01-12 Tl171


.A.amblare si depanare PC Reusna curenta 2018-12-0l Ti171
..\samblare "' depa.,are PC Testc> 1 2017-Hl-11 Tl171
.Asamblare s1 depanare PC Testul 2 2U1 7-12-1E Tl171
Baze de date Ex-amen 2018-01-11 Ti171
Rt\1F:rlr.i1i'1tF: Fr,=imp,n /l11 Ur1·1c \.! A171
/
Administrarea viziunilor 1i a expresiilor-tabel

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.

8.2. 1. Tipuri de viziuni


0 viziune este un tabel virtual format din randuri ~i coloane de date, care provin din tabelele la care
se face referire lntr-o interogare care define~te viziunea. Randurile ~i coloanele sale sunt generate dinamic
in momentul in care se face referire la vedere.
Interogarea, care determinii o viziune, poate proveni dintr-unul sau mai multe tabele sau din alte
viziuni. Este permisii efectuarea oricaror interogari ~i chiar actualizarea datelor prin intermediul viziunilor.
Atunci, cand se creeaza o viziune, poate fi selectat cont inutul, care se dore~ te afi~ at intr-
un tabel, deoarece viziunile pot act iona ca filtre care ajuta la gruparea tabelelor, protejarea
anumitor coloane ~ i simplificarea codului unui program.
Chiar daca SQL Server este dezactivat, viziunea, odata creata, nu inceteaza sa exista in
sistem. De~ i este compus din SELECT, viziunile nu ocupa spat iu in baza de date.
Viziunile pot fi de trei tipuri. Alegerea uneia dintre ele depinde de scopul pentru care a
fost creata. In continuare, sunt descrise cele trei tipuri de viziuni:
• Viziuni-standard: in acest tip de viziuni, datele dintr-una sau mai multe viziuni sau tabele de
baza sunt colectate intr-un tabel virtual.
• Viziuni indexate: Acest tip de viziuni este obtinut prin crearea unui index cluster asupra
viziunii.
• Viziuni partajate: Acest tip de viziuni permite ca datele dintr-un tabel mare sa fie divizate in
tabele mai mici. Datele sunt impaqite intre tabele in functie de valorile acceptate in coloane.

8.2.2. Avantaje oferite de viziuni


Viziunile sunt, in general, folosite pentru a concentra, simplifica ~i personaliza fiecare piitrundere a
utilizatorului in baza de date. Ele pot fi folosite ~i ca mecanisme de securitate, permitand utilizatorilor sa
acceseze date prin intermediul viziunilor, fara a acorda utilizatorilor permisiuni de acces la tabelele din
baza, in mod direct. Viziunile pot fi, de asemenea, folosite atunci cand sunt copiate date din ~i in SQL
Server, ~i pentru partajarea datelor.
Astfel, utilizarea viziunilor prezinta o serie de avantaje:
Reutilizare: Viziunile sunt obiecte permanente, astfel meat acestea pot fi citite de mai multi
utilizatori simultan.
Reducerea Rezultatele deja calculate, care sunt stocate lntr-o viziune indexatii, sunt utilizate de
costului de optimizatorul de interogari ~i, prin urmare, costul de executie este redus
executie:
- --· - - - - ·- - - - - - -
Securitate: Viziunile permit sa se ascunda anumite coloane dintr-un tabel.
Compatibilitate: Viziunile pot crea o interfatii compatibilii cu versiunile anterioare, simuland un tabel
cu schema modificatii.
Administrarea viziunilor ~i a expresiilor-tabel

---··--~----- --- ----,


Copierea Viziunile pot fi foarte utile pentru imbunatatirea performantei ~i pentru partitionarea ·
datelor: datelor in cazurile in care se copie date catre -sau
_,, _.__ _ - - - - - - v• •• -- -- --
~ ~ --~_._
de la SQL Server.
·--- ______
· -~-··- v _, -1J
,._,ff·• ,., ,.,

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:

• Folosind View Designer al componentei SQL Server Management Studio.


• Utilizand Editorul de Interogari.

8.3. Administrarea viziunilor in SQL Server Management Studio


Infonnatiile despre vederi pot fi vizualizate folosind SQL Management Studio, atat prin Object
Explorer (unde se gase~te lista viziunilor bazei de date ~i exista acces la coloane, declan~atoare, indec~i ~i
statistici definite in viziune), cat ~i caseta de dialog View Properties (unde se gasesc proprietatile
individuale ale viziunii).

8.3.1. Crearea viziunilor cu View Designer


Pentru crearea unei viziuni, se executa urmatorii p~i:
1. Se extinde grupul de servere ~i apoi se extinde serverul necesar.
2. Se extinde Databases ~i apoi se extinde baza de date in care se va crea viziunea.
3. Se face un click cu butonul drept al mouse-ului pe View.
4. in meniul de context care a aparut, se face un click pe optiunea New View ...
Adminh;trarea viziuniior ~i a expresiilor-tabel

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 ~

'.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.

, ,;;. VV.un•vers tatea - dtio.lf1ew_1• - Mcrnsoft SOt. Sen;er !Vanagernent Stud1c1


File Edit View Project Debug Quel)• Designer Tools Window Help
0 • tJ • · "' Ii Iii,.. J§J NewQuel)' .'!!l f;;i ,'.i1 ,~ C,1
~ m >Ql 1111 ..i§l sf,, U; mi "Im ;-
"' x SQlQueryl.sql - L0...01.master (sa (66)) Object Expforer O~tails

Add Table

Tabios Vi•w• Fun cti ons: , Synony_m_' - - - -- -----


Or..
grupe
orarul
oraru l_g rup a (sc hema_un iversitat ea2)
profesori
rtudenti
5tudenti_reu!iita

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

im discipline .:::J Im studenti_reusita .:::J


,_.....,..-.-(A-ll -C-ol-un_1_n,- . ) - - - - - jCJ' (All Columns) ~
...
dd_Disciplina "> . .I. ·"-'· .-~. ~-~ """"j ·· ?- . .
1oisciplina ~ Add Table
[; Nr_o re_plan_discip!ina

< 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.

m3 discipline m3 studenti_reusita m3 grupe


Or.. 0 • (All Column<,;) D ld_Disciplina [J • (All Columns)
~j ld_Disciplina D ld_Prufesor l~ O ld_Grupa
0 Disciplina O ld_Grupa ~ R] Cod_G rupa
D Nr_ore_plan_di<.;ciplina R] Ttp_Evaluare D Specialitate
0. Nota D Nume_Facultate
<
Column Alias Table Outp ... So rt Type S.ort Order Filter
Disciplina diocipline ~
Tip_Evaluare studenti_r ... [;i'.]
Neta studenti_r. .. ~
Cod_ Grupa grupe ~
1..1 r1;,_;_1; __ ...J: .... _.; .... 1; ..... ,.... r'1

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

m:l discipline m:l studenti_reusita m:l grupe


• (All Column;) ld_Disciplina ... :D• {All Column>)
I~! ld_Disciplina i[_J Id_Grupa
[;;] Disciplina
Nr_ore_plan_disciplina
ld_Profesor
O ld_Grupa
!';;] Tip_Evaluare
JI'] 11.~ Cod_ Grupa
[] Specia litate
[;.!]Neta
..:J !D Nume_Facultate

<
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

Dis-ciplina Tip_Evaluare Nota Cod_ Grupa ld_Disciplina


,. Cerce:ton op-:.ra ... bami::n ~ CIE:W1 1:s
Cercetcn op.:ra ... Reus1ta curento 0 CIBI ~! ICS
Cercetan opera ... T.-:stu! 1 g C181-:-1 I'"·
CJ

-
I ,;;ri- ,;.t;;ri 0n,;;.r:i T ;;.;t1 d J ni::1-1 1"'·

Trebuie mentionat ca ordinea de prezentare a coloanelor, afi~atli in rezultat, este determinata de


secventa de clicuri de bifare aplicate asupra coloanelor din panelul diagrame.

8.3.2. Salvarea viziunilor


Pentru a putea fi folosita in diverse moduri, viziunea creata trebuie, mai intai, salvatli. Cu aces!
scop, se face un click asupra butonului Save ~i se alege un nume pentru viziune. in cazul nostru, viziunea
se va numi exemplull. Mai departe, editorul de viziuni poate fi inchis.
Sa se observe ca s-a revenit la SQL Server Management Studio, iar viziunea, deja, salvata se
glise~tein multimea de viziuni in arborele Object Explorer.

Object Explorer . . q. x Object'&ptorerDetaits -!;I

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

8.3.3. Exc/uderea unei coloane din setul de rezultate al viziunii


Pentru a exclude o coloanii, se face un click cu butonul drept al mouse-ului asupra viziunii din
arborele obiectelor din Object explorer. in meniul de context care s-a deschis, se aplica un click pe
optiunea Design. in acest punct, va fi deschisa urmatoarea fereastra:

t:dtt Vtew fJrOJeCt I ools Window Help


I ftJ • . ,;,

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.

8.3.5. Crearea criteriilor in viziuni


Pentru crearea criteriilor, se procedeaza in modul urmator:
Se deschide fereastra de proiectare a viziunilor. Pe panelul criteriilor, In coloana Filter se introduce
criteriul, care nu este altceva decat un filtru.
Sa se execute urmatorul exemplu:
In coloana Filter a campului Tip_Evaluare, se tipare~te continutul LIKE 'Test%' ~i apoi se executa
viziunea, aplicand un click asupra butonului Execute SQL. Sa se observe pe panel rezultate, unde sunt
~te inregistrarile, ca sunt expuse numai cele care au inceputul valorii campului Tip_ evaluare egal cu
'Test".
Administrarea viziunilor ~;a expresiilor-tabel

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.

8.3.6. Acordarea permiselor


Trebuie mentionat ca, inainte de acordarea unui utilizator anumit a permiselor de acces la viziunile
sau la alte obiecte ale bazei de date, este necesar ca acest utilizator sa fie in lista de acces la serverul ~i/sau
baza de date respective. Pentru stabilirea permiselor, se executa urmatorii p~i:
1. in Object explorer se expandeaza dosarul Views.
2. Se executa un click cu butonul drept al mouse-ului pe viziunea asupra careia vor fi definite
permisele.
3. in meniul de context, se face un click pe optiunea Properties.
4. Apare fereastra, deja, cunoscuta, de setare a proprietatilor. in partea stanga a ferestrei, se alege
pagina Permissions similara celei din capitolul precedent (sectiunea 7.2.3).
Administrarea viziunilor ~i a expresiilor-tabel

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

View o.ame: exemplul 1


valori in
]Jsers or rules : S~arch ...
CIB 171'.
Testul l?i
valuare.
i=. ,. .Name
........
Type
Ann..a...................................................................................................................................................................., User ..
l ,<t.'

i=. Ion User

Connedioo
Server:
MV P.ennissions for Anna: t;;_olumn Pennissions .. .

Comect1on : Explicrt Effective


MV1manan
Permission Gram or Gram 'N[h Grant Deny
'fl View connection prupert1es
r'
"
Control L..l
,......,
f.J []
Delete u c:::; D
Insert 0 D D
PrO!)l"eSS References D r·1 Cl
Select [.?! J~L D
Ready
Take ownership D D
·········'
D ..,
< >

OK Cancel

8.3.7. Obtinerea informatiilor despre proprietatile (dependentele) viziunilor


Se pot obtine informatii despre definitia unei viziuni, daca aceasta nu este criptata. S-ar putea sa fie
drept pe nevoie sa se vada definitia viziunii pentru a intelege cum sunt extrase datele ei din tabelele-sursa sau a
;tiune, in vedea datele definite de viziune.
riterii de
Cand se executa o interogare printr-o viziune, motorul bazei de date executa o verificare pentru a se
~igura ca toate obiectele de referintA declarate exista in baza de date ~i ca acestea sunt valabile In
contextul interogarii, ~i ca modificarea datelor respective nu incalca nici una dintre regulile de integritate a
datelor. Daca controlul sufera e~ec, el returneaza un mesaj de eroare. Daca verificarea are loc cu succes,
viziunile actiunea se transmite mai departe catre tabelul sau tabelele pe care e definita viziunea.
rul ~i/sau
in cazul in care o viziune este construita in baza unui tabel sau altei viziuni, care au fost ~terse ~i
cineva incearca sa foloseasca aceasta viziune, motorul bazei de date genereaza un mesaj de eroare. Daca
este creat un tabel nou ~i structura tabelului nou nu se deosebe~te de structura tabelului precedent care a
i defmite fost ~ters, viziunea din nou devine utilizabila. Daca structura tabelului nou este modificata, viziunea veche
trebuie, la randul ei, sa fie reconstruita.
in cazul in care se modifica numele unui obiect implicat in viziune, trebuie modificata viziunea
, se alege astfel, incat textul ei sa reflecte numele nou. De aceea, inaintea redenumirii unui obiect, mai intai, se
Administrarea viziunilor ~i a expresiilor-tabel

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.

Object Dependendes - exemplul1


Select a page
J- General
!J • \, Help

':) Qbjects that depend on [exernplul 1]


-. , Objects on ~hich [exernplu11l depends

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

YT View connection properties IL _ _ _J


Selected obiect
Name : .
Progress
{MVJ.!universrtateaJ.!dbo ]. [exemplul1)
Jype:
,..)) Ready
·~ __.. .... Qependency type:
Schema-bound dependency

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.

SQLQueryS.sql - MV ... a (MV\marian (53))* .g X Object Explorer Detaifs


/*.}"°""'""'~
Scr i pt fc•r S<?l ec t -:-opNRm;s comnand f rom 55f,1S
2 - SELECT TOP • 1000 ) [Disciplina]
, [Testul ]
J [Grupa]
, [Oata_Evaluare]
FROM [universitatea] . [dbo] . [exemplul1]
__, 121 % ~

!ii Results ~11 Messages


Disciplina Testul Grupa Data_Evaluare
Cercetari operationale Testul 1 CIBl71 .2017-1{]-{}!;
2 Cercetari operationale Testul 2 CIB171 2017-12-09
3 Baze de date Testul 1 CIB171 2017-Hl-10
eel
.! Baze de date Testul 2 CIB1 71 2017-12-15
~ C:+n 1....+1 Jri ~~ .4~o. ~ i ":Jlrtnri+M"li Toc+111 1 rlR171 ?111 7 . 1!\.1/

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

8.4. 1. Sintaxa genera/a a instrucfiunii de creare a viziunilor


Sintaxa generala a instructiunii de creare a viziunilor este urmatoarea:

CREATE VIEW [<nume_schema>.]<nume_viziune> [ (<coloana> [ , ... n] ) ]


[WITH <atribute_viziune> [ , ... n] ]
AS <instructiune select>
[ WITH CHECK OPTION ] [ ; ]

<atribute viziunii> ::=


{ [ ENCRYPTION ]
[ SCHEMABINDING ]
[ VIEW METADATA ] }
unde
<nume schema>
Este numele schemei de care apaqine viziunea.
<nume viziune>
Este numele asignat de utilizator viziunii care se creeaza. Numele viziunii trebuie sa urmeze
regulile de construire a identificatorilor. Specificarea numelui .detinatorului viziunii este optionala.
<coloana>
Este numele care va fi utilizat pentru o coloana intr-o viziune. Un nume de coloana este necesar
doar in cazul in care o coloana este derivata dintr-o expresie aritmeticii, o functie, sau o constanta;
atunci cand doua sau mai multe coloane diferite au acel~i nume, de obicei, din cauza unei
jonctiuni; sau atunci cand o coloana din viziune are specificat un nume diferit de eel al coloanei
din care este derivat. Nume de coloane pot fi, de asemenea, atribuite in cadrul interogarii SELECT.
Daca coloana nu este specificata, coloanele viziunii obtin acelea~i nume ca ~i coloanele respective
din interogarea SELECT.
<instructiune select>
Interogarea SELECT care defme~te viziunea.
CHECK OPTION
Forteaza toate instructiunile de modificare a datelor care sunt executate asupra viziunii sa respecte
criteriile impuse de instructiunea SELECT. Atunci cand o linie este modificata printr-o viziune,
clauza WITH CHECK OPTION asigura ca datele sa ramana vizibile prin viziune dupa ce
modificarea este validata.
Orice actualizari efectuate direct asupra tabelelor care formeaza viziunea nu sunt verificate, chiar
daca optiunea CHECK este specificata.
ENCRYPTION
Cripteaza intrarile in sys.syscomments care contin textul instructiunii CREATE VIEW. Utilizarea
clauzei WITH ENCRYPTION previne faptul ca viziunea sa fie publicata ca parte a unei replicari
SQL Server.
SCHEMABINDING
Leaga viziunea de schema din care fac parte tabelele in baza carora s-a creat viziunea. in cazul In
care SCHEMABINDING este specificat, tabelul sau tabelele de baza nu pot fi modificate intr-un
mod care ar afecta defmitia viziunii. ins~i defmitia viziunii trebuie mai intai sa fie modificata sau
distrusa pentru a elimina dependentele din tabelul ce trebuie modificat. Atunci cand se folose~te
SCHEMABINDING, instructiunea SELECT trebuie sa includa cele doua paqi ale numelui
(schema.obiect) tabelului, viziunii sau a functiei defmite de utilizator care sunt referite.
Toate obiectele referite trebuie sa fie in acee~i baza de date.
Viziunile sau tabelele care participa intr-o viziune creata folosind clauza SCHEMABINDING nu pot
fi distruse sau modificate inainte ca viziunea sa fie distrusa sau modificata astfel, incat sa nu mai
existe legatura cu schema. in caz contrar, SQL Server va retuma un mesaj de eroare.
Administrarea viziuni/or ~i a expresiilor-tabel

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.

8.4.2. Crearea viziunilor


Pentru crearea unei viziuni, se utilizeaza instructiunea CREATE VIEW. Instructiunea atribuie un
nume viziunii ~i precizeaza interogarea care define~te viziunea. Optional, instructiunea CREATE VIEW
poate atribui un nume coloanelor viziunii nou-create. Daca este prezenta o lista cu nume de coloane,
aceasta trebuie sa aibli acel~i numar de elemente, ca ~i al coloanelor fumizate de interogare. Daca lista de
coloane este omisa, fiecare coloana din viziuni va avea acel~i nume cu al coloanei din interogare. Numele
coloanelor unei viziuni trebuie specificate explicit, doar in cazul in care interogarea cuprinde coloane
calculate sau doua coloane cu acela~i nume, provenite din tabele-sursa diferite.
Daca mai mult de o coloana a viziunii au acela~i nume, ele trebuie sa fie redenumite sau sa fie
prefixate cu numele tabelelor din care fac parte. Pot fi construite viziuni asupra altor viziuni sau proceduri
ce se refera la viziuni. Asupra viziunilor pot fi construiti indec~i sau definiti indec~i full-text.

8.4.2.1. Un exemplu de creare a viziunii


Prin intermediul unei viziuni pot fi inserate datele intr-un tabel. Cu acest scop, coloanele din tabelul
de baza, care nu sunt afi~ate in view, trebuie sa respecte una din urmatoarele situatii: fie trebuie sa accepte
valori nule, fie ele sunt autoincrementate, fie trebuie sa aibli o valoare prestabilita (DEFAULT).
Daca viziunea consta dintr-un SELECT, care cite~te date prezente in tabele diferite, pentru a insera
date in tabelele respective prin intermediul viziunii, trebuie introduse in coloanele care ajung in tabel in
ace~i moment. Atunci, cand se executa inserarea, modificarea sau ~tergerea datelor dintr-un tabel de
bl2A al viziunii, sarcina efectuata se reflecta automat in viziune.
Crearea viziunii, fie exemplul2, in baza de date universitatea, poate fi realizata cu ajutorul
instructiunii CREATE VIEW, de exemplu, in modul urmator:

DROP VIEW IF EXISTS dbo. exemplul2;


GO
•• Creare viziune exemplul2
CREATE VIEW exemplul2 AS
SELECT Disciplina, Nr_ore_plan_disciplina
FROM discipline
WHERE Nr_ore_plan_disciplina > 60

•• Test interogare Viziune


ELECT * FROM exemplul2

ELECT Disciplina FROM exemplul2


A doua instructiune testeaza existenta viziunii specificate. Daca vlZlunea exista, aceasta este
· ata. Daca, insli, viziunea lipse~te, instructiunea DROP VIEW nu este executata.
in a treia instructiune, se precizeaza declaratia CREATE VIEW, dupa care urmeaza numele viziunii,
mplu/2. Mai departe, e specificat cuvantul-cheie AS, urmat de interogarea SELECT, prin care se
e¥e structura ~i continutul viziunii create. Viziunea cuprinde toate inregistrarile coloanelor
iplina ~i Nr_ore_plan_disciplina din tabelul discipline, unde numarul de ore este mai mare de 60.
ie mentionat ca instructiunea CREATE VIEW nu contine, dupa denumirea exemplul2, numele
elor necesare (Disciplina ~i Nr_ore_ylan_disciplina), deoarece toate sunt enumerate in lista
CT.
A dministmrea viziunilor ~i a expresiilor-tabel

8.4.2.2. Utilizarea optiunii WITH SCHEMAS/ND/NG


Atunci, cand este specificata opfiunea SCHEMABINDING, vlZlunea este legata de schema
(structura) tabelului (tabelelor) la care se refera, astfel, incat nu poate fi modificat tabelul (tabelele), daca
aceasta (acestea) implica schimbari in definitia viziunii. Pentru ca tabelul (tabelele) sa fie schimbat, este
necesar ca dependentele existente dintre viziune (viziuni) ~i tabel (tabele) sa fie eliminate, deci, mai intai
trebuie modificata sau eliminata definitia viziunii.
Urmatorul exemplu, CREATE VIEW exemplul3, creeaza o viziune cu optiunea WITH
SCHEMABINDING. Aceasta optiune interzice ~tergerea obiectelor, la care se refera viziunea creata. Cu
alte cuvinte, structura tabelului este dependenta de cea a viziunii ~i invers. Adica nu se poate modifica
structura unor cfunpuri care fac parte dintr-o viziune.
Coloanele viziunii exemplul3 sunt definite explicit. Functiile YEAR, DATENAME ~i DAY sunt
functii native ale sistemului SQL Server. Aplicate asupra coloanei Data_Nastere_Student, ele separa data
na~terii in an, luna ~i zi. Functiile YEAR ~i DAY returneaza numere intregi, care reprezinta anul ~i ziua,
respectiv, ale datei procesate. Functia DATENAME returneaza un ~ir de caractere: denumirea lunii, in
cazul nostru.
Atunci, cand se incerca sa se modifice sau sa se elimine tabelele sau vederile, care pot cauza
modificari ale definitiei viziunii create cu SCHEMABINDING, motorul bazei de date genereaza o eroare.
De asemenea, in momentul in care acestea afecteaza definitia viziunii, instructiunile ALTER TABLE
executate pe tabelele care participa la construirea viziunii cu optiunea SCHEMABINDING vor e~ua.
Observati ca, dupa testarea reu~ita a viziunii, nu poate fi suprimata coloana Data_Nastere_Student
din tabelul studenfi.
Exemplul3 demonstreaza efectele utilizarii optiunii WITH SCHEMABINDING.

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

3ll Results ~'il Messages

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.

:>AY sunt 8.4.2.3. Utilizarea optiunii WITH CHECK OPTION


para data
Codul urmator creeaza o viziune, utilizand optiunea WITH CHECK OPTION. Acesta obliga ca In
i ~i ziua,
cazul in care se folosesc comenzi de actualizare a datelor executate asupra unei viziuni trebuie sa se
lunii, in
respecte regulile de integritate impuse de instructiunea SELECT, din definirea viziunii.
in viziunea exemplu/4, instructiunea SELECT este similara cu cea din exemplu/2, presupunand ca
Jot cauza
doar inregistrarile care satisfac conditia Nr_ore_plan_ disciplina>60 pot fi inserate, actualizate sau ~terse.
o eroare.
Adica nicio instructiune DML nu poate sa utilizeze viziunea, decat daca criteriul din clauza WHERE este
? TABLE
satistacut.
1a.
! Student USE universitatea
GO
DROP VIEW IF EXISTS dbo. exemplul4;
GO
-- VIEW cu conditie de filtru
CREATE VIEW exemplul4 AS
SELECT Disciplina, Nr_ore_plan_disciplina
FROM discipline WHERE Nr_ore_plan_disciplina > 60
WITH CHECK OPTION;
GO
-- Testare viziune
SELECT * FROM exemplul4
Viziunea exemplu/4 afi~eaza numai disciplinele cu planul de ore mai mare de 60, dupa cum se
poate vedea In imaginea de mai jos:

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.

8.4.2.4. Utilizarea optiunii WITH ENCRYPTION


Urmatorul exemplu reprezinta o viziune, exemplulS, care contine unele date ale studentilor din
viziune exemplu/3 ~i o expresie CASE cu coloana Se/_ Grupa din tabelul grupe formata in baza acestei
expresii. Definitia viziunii nu va mai putea fi afi~ata:
Administrarea viziunilor 1i a expresiilor-tabel

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.

8.4.3. Operafii DML asupra viziunilor


Viziunile permit programatorului Transact-SQL sa creeze reprezentari ale datelor care pot fi diferite
de tabelele de baza. Astfel, dupa ce o viziune a fost definita, ea poate fi utilizata in instructiunea SELECT,
ca un tabel real. De exemplu, sa se afi~eze numiirul de ore planificate pentru disciplina 'Informatica
aplicata':

SELECT Disciplina, Nr_ore_plan_disciplina


FROM exemplul2 WHERE Disciplina = 'Informatica aplicata';
Numele viziunii, exemplul2, apare in clauza FROM la fel ca ~i numele unui tabel, iar coloanele
viziunii sunt referite in instructiunea SELECT la fel ca ~i coloanele unui tabel obi~nuit. Numai ca, spre
deosebire de lucrul cu tabelele, in instructiuni, in loc de numele tabelului, se scrie numele viziunii.
Numele unei viziuni poate fi invocat nu numai in interogari, ci ~i in comenzile INSERT, DELETE
sau UPDATE, caz in care tabelele de bazii din definitia view-ului pot suferi modificiiri ~i, in acest sens, se
impun restrictii.
Cand SGBD-ul intalne~te o referinta la o viziune intr-o instructiune SQL, cauta definitia acesteia in
baza de date, apoi transforma cererea care face referire la viziune intr-una echivalenta, dar care se refera la
tabelele-sursa.
Fie asupra viziunii exemplul2 era aplicatii urmatoare instructiunea DML

UPDATE exemplul2 SET Nr_ore_plan_disciplina = 60


WHERE Disciplina = 'Sisteme de calcul';
Atunci, inregistrare din tabelul de bazii, unde disciplina este egala cu 'Sisteme de ca/cul', nu mai este
accesibila pentru aceasta viziune, deoarece valoare noua nu va satisface clauza WHERE din viziune. Pot
exista cazuri cand astfel de situatii sunt nedorite.
Cand interogarea bazei de date se realizeaza printr-o viziune, sistemul verifica daca toate obiectele
referite exista ~i daca sunt valide in contextul instructiunii. Daca eel putin una din aceste verificari
e~ueazii, interogarea e anulatii ~i se returneazii un mesaj de eroare.
Allmini.5trarea viziunilor ~i a expresiilor-tabel

- 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~:

ALTER VIEW [ <nume_schema>.] <nume_viziune> [ ( <coloana> [ , ••• n ] ) ]


iectele [ WITH <atribute_viziune> [ , ••• n ] ]
rificari AS <instructiune select>
[ WITH CHECK OPTION ] [ ;
Administrarea viziunilor ~i a expresiilor-tabel

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:

ALTER VIEW exemplul2 AS


SELECT Disciplina, Nr_ore_plan_disciplina AS Numar_ore
FROM discipline WHERE Nr_ore_plan_disciplina = 60
Limbajul Transact-SQL ofera suport pentru suprimarea unei viziuni, prin intermediul instructiunii
DROP VIEW:

DROP VIEW [<nume_schema>.]<nume_viziune> [ ... ,n] [ ; ]


Viziunile sunt ~terse, aplicand numai definitiile sale, dar nu ~i tabelele sau viziunile pe care se
bazeaza. Pot fi ~terse mai multe viziuni cu o singura instructiune DROP VIEW. Urmatorul exemplu
elimina ambele obiecte:

DROP VIEW exemplul2, exemplul3;


Utilizarea unei viziuni prezinta, in acel~i timp, avantaje ~i dezavantaje. De~i viziunile constituie un
instrument extrem de convenabil pentru dezvoltatorul de aplicatii, utilizarea viziunilor prost construite sau
nepotrivite scopului, poate avea un impact negativ asupra performantei acestora. Daca, pentru viziuni
simple (de exemplu, simple copii ale unui tabel), impactul asupra performantei nu este sesizabil, pentru
viziuni complexe, care cuprind interogari pe mai multe tabele, acest impact poate fi foarte sever. De aceea,
folosirea viziunilor trebuie planificata cu grija, pentru a se vedea daca avantajul creat de simplitatea in
manipulare a acestora compenseaza impactul negativ asupra performantei.

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.

8.5.1. Caracteristici de baza ale CTE


Expresia-tabel nu reprezinta obiecte ale bazei de date, cum ar fi viziunile sau procedurile stocate.
Adresarea la o expresie CTE este posibila numai dupa crearea sa.
Sintaxa generala a instructiunii de creare a expresiei-tabel este urmatoarea:

WITH <expresie_tabel> [ , ... n] ]

<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.

8.5.2. lnterogari CTE nerecursive


Rezultatele interogarilor ale expresiilor-tabel returneaza o singura data unset de rezultate pentru un
stituie un apel extern. Ea nu poate contine nicio instructiune ce ar putea apela la propria sa expresie CTE
ruite sau Expresiile-tabel folosesc doua forme de aliasuri: exteme ~i inteme. in cazul in care coloanele sunt
U viziuni
aliasuri in definitia de interogare propriu-zisa, atunci acesta este numit alias intern:
il, pentru
De aceea, --alias coloana interna
1litatea in WITH cte AS (SELECT 1 AS coll,2 AS col2)
SELECT * FROM cte
Daca sunt fumizate nume de coloane in paranteze, imediat, din dreapta, dupa numele expresiei-
tabel, atunci aceasta reprezinta aliasul extern:
lporar de
re a unei --alias coloana externa
poate fi WITH cte( coll, col2) AS (SELECT 1, 2)
ne~te. 0 SELECT * FROM cte
cest caz,
in cazul in care sunt utilizate atilt aliasurile inteme, cat ~i exteme, atunci in baza rezultatului
instructiunii va aparea urmatorul tablou:

: stocate.
_ - L•JITH cte 1 coll1 , col22 . AS , SELEC T 1 AS co l l . 2 AS col2
_ SELECT ~ FROM cte

121 %

ml Results ~ii Messages


col11 col22
2

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.

Introducerea de punct ~i virgulli inainte, cu care se stabile~te clauza WITH:

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:

~ - 11ITH reusitaAvg ( Id_Student , Medie_student } AS


, SELECT Id_Student , AVG ( Nota ) FROM studenti_r·eusita GROUP BY I d_Student '
3 SELECT r . Id_Student ,
!.. s Id_Discipl ina ,
s . Nota AS Nota_Examen ,
r . Medie student
FROM studenti_reusita s lQTI' r e us i taAvg r ON s . Id_Student = r Id_Student
8 .., ;- I' Medie_student " s Nota

!\fl'' s . Tip_Evaluare 'Examen'


121 ~~

Em Results l§l'i Messages


ld_Student ld_Disciplina Nota_Examen Medie_student
: 100 : 105
.............................•
s 7
2 100 108 8 7
100 113 s 7
1M 11 7

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.

8.5.3. Expresii-tabel cu funcfii analitice


Deseori, pentru solutionarea problemelor de sortare sau grupare a datelor, se construiesc interogari
complexe sau in cazul volumelor mari, datele intermediare se salveazli in baze temporare (tempdb), sau
chiar ~i ni~te tabele fizice in schema bazei utilizatorului, dupli care se analizeazli din nou sau se compart
cu setul initial de date. 0 solutie de altemativli, in a~a cazuri, ar fi utilizarea functiilor analitice Tranzact-
SQL.
Atlministrarea viziunilor 1i a expresiilor-tabel

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:

DECLARE @tbl_List TABLE (T_ID INT IDENTITY, T_DBMS VARCHAR(10))


INSERT INTO @tbl_List
VALUES('SQL Server'), ('Oracle'), ('PostgreSQL'), ('Oracle'),
('PostgreSQL'), ('SQL Server'), ('Oracle'), ('PostgreSQL');
Pentru simplitate, in exemplu, a fost inclusa doar o coloanii, sugerand ca datele sunt determinate, in
mod univoc, de valorile din coloana T_DBMS. Sarcina consta in construirea unei coloane T_DBMS unice
(de exemplu, cheia primara), dupa indepartarea duplicatelor.
La definirea acestui tabel, a ~i fost introdusa coloana T_ ID, care se genereaza automat cu ajutorul
optiunii IDENTITY ~i valoarea de incrementare este implicit egala cu 1.
Se studiaza instructiunea SELECT de mai jos cu urmatoarea structura analitica:

SELECT T_ID, T_DBMS,


ROW_NUMBER() OVER(PARTITION BY T_DBMS ORDER BY T_ID) AS Num
FROM @tbl_List;
Functia ROW_NUMBERO atribuie un numar de ordine fiecarei inregistrari in functie de criteriul de
ordonare specificat in clauza OVER [44]. Clauza PARTITION BY reprezinta coloana (sau coloanele) dupa
care se creeaza grupari in setul de date, iar ORDER BY reprezinta coloana (sau coloanele) dupa care se
realizeaza ordonarea pentru stabilirea valorilor-rang in cadrul partitiei.
Funcfia ROW_NUMBERO mtoarce o valoare-rang data de numarul randului [43]. Fiecare rand din
setul de date va fi cu 1 mai mare decat precedentul rand ~i cu 1 mai mic decat urmatorul rand. Primul rand
din setul de date va avea valoarea 1. Acest rang se poate aplica ~i pe partitii de date ale setului de date
(adicA, pe grupuri de date).
in cazul concret, partitionarea de date este realizata pe coloana T_DBMS. Urmeaza rezultatul
interogarii:

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

SELECT T_ID 1 T_DBMS , ROhi_NUMBER (


·.1 OVER ( PARTITION BY T_DBMS ORDER BY T ID 1 AS Num
10 FROM @tbl_List
_J,,_ -~·

12 DELETE FROM CTE hJHERE Num >l ;


SELECT ~· FROM @tbl_List
121 %

ml Results [§J'I Messages g-a Execution plan ·

T_ID T_DBM S
: SOL Server
2 2 Oracle
J 3 PostgreSOL

8.5.4. lnterogarile recursive folosind expresii-tabel


Fiind dotate cu un instrument, cum ar fi expresiile-tabel, interogarile devin foarte u~or accesibile
pentru rezolvarea problemei de stocare eficienta a structurilor recursive, cum ar fi liste inlantuite, arbori,
grafuri etc.
in general, se poate spune ca expresiile-tabel, in comparatie cu stocarea conventionala a datelor
recursive, u~ureaza operatiile de schimbare ~i elimina o multitudine de blocl'iri. Dar, in acel~i timp, sunt
mai scumpe selectiile, care necesita recursivitate: in imbricari reduce aceasta diferenta ~i este aproape sau
complet invizibila, dar aplicarea volumelor mari (teste empirice au aratat> 100.000), devin esentiale. in
practicl'i, aceste imbricari sunt rare, iar daca apar vor fi necesare, probabil, alte instrumente ~i algoritmi.
Un avantaj al interogarilor recursive este acela ca se pot auto-referi. Rostul acestora poate fi aplicat
pentru a reprezenta date ierarhice a~a cum este, de exemplu, o organigrama a departamentelor dintr-o
companie sau un meniu pentru un site web etc.
Pentru a se rezolva acest aspect, au apl'irut mai multi algoritmi. Prin interogl'irile recursive, exista
posibilitatea de a standardiza modul de lucru cu datele ierarhice ~i cu interogl'iri asupra acestora.
Principiul general de exprimare a recursiei:

WITH <nume_expresie> [ (<nume_coloana> [ , ... n] ) ] AS


(
<membru ancora>
UNION ALL
<membru recursiv>
)
SELECT * FROM <nume_expresie>
[OPTION (MAX.RECURSION <numarul_bucle>)];
Se poate observa ca interogarea recursiva este formata din doua interogl'iri numite membru ancora ~i
membru recursiv. Membrul ancora constituie interogarea al cl'irei rezultat va fi folosit ca intrare pentru
membrul recursiv. Aceasta se va autoapela pana cand niciun rand nu mai este intors (conditie de
incheiere). Ar mai fi mentionat, ca reguli pentru interogarile recursive, ca UNION ALL este singura
constructie permisa intre cei doi membri ~i ca membrul recursiv poate referi doar o singura interogare
recursiva (CTE).
in cazul in care recursia poseda o bucla infinita, se utilizeazl'i cuvantul-cheie OPTION
(MAXRECURSION <numarul_bucle>) pentru a o evita.
Atlministrarea viziunilor #a expresiilor-tabel

Un exemplu, construit dintr-o interogare simpla cu utilizarea operatorului UNION ALL:

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 t(N) AS (SELECT 41 UNION ALL SELECT 43),


e(N) AS (SELECT 40 UNION ALL SELECT 44)
SELECT AVG(t.N), AVG(e.N) FROM t, e
rezultatul va fi o linie cu doua elemente: 42, 42.
Cu toate ca ambele exemple de expresii-tabel sunt legate cu operatorul UNION ALL, ele nu sunt
recursive. 0 expresie-tabel recursiva trebuie eel putin sa posede un membru-ancora ~i un membru
recurs iv.
Expresia CTE urmatoare este una recursiva:

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')

SELECT Lit FROM Li tere;


a datelor
mp, sunt Interogarea membrului-ancora define~te codul ASCII al primei litere a alfabetului ~i simbolul ei
oape sau corespunzator. Iar interogarea membrului recursiv mare~te cu o unitate codul ASCII, referindu-se la CTE
ttiale. in in propozitia FROM. Ca urmare, in conformitate cu primul caracter va fi adaugat succesiv (UNION ALL)
itmi. cu unnatoarele litere in ordinea codurilor ASCII. Iteratiile vor continua atata timp, cat conditia
Cod+ I<=ASCII ('Z') este adevarata, adica, pana nu se va adauga la litera "Z".
'i aplicat
· dintr-o 8.5.5. O expresie-tabe/ recursiva pentru ca/cu/ul factoria/ului unui numar
Un exemplu folosit pentru demonstrarea puterea unei CTE este calculul factorialului unui numar,
!, exista fie 5, pomind de la o singura instructiune Transact-SQL. in orice limbaj de programare, se face, de obicei,
o bucla sau o functie recursiva pentru a obtine rezultatul.
Partea cea mai importanta este construita prin utilizarea recursiei cu expresie-tabel, aplicand
UNION ALL. Pentru a intelege cum ar putea arata un program care calculeaza factorialul unui numar,
folosind structura recursiva cu prezentarea virtuala, se aplica urmatorul cod:

\>/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.

8.5.6. 0 expresie-tabe/ recursiva pentru parcurgerea unei ierarhii


Aceasta procedura este un mod convenabil de parcurgere a unei ierarhii care reprezinta una dintre
formele de enumerare a membrilor unei familii.
Un arbore genealogic contine, de obicei, mult mai multe coloane decat eel prezentat aici. Este redus
numarul de coloane ale tabelului pentru a mtelege construirea structurilor ierarhice virtuale. De asemenea,
1n aceasta interogare, este luat 1n considerare doar unul dintre parinti (tatal sau mama) de fiecare persoana.

DECLARE @TT TABLE


(
ID INT,
Relatie VARCHAR(25),
Nu me VARCHAR(25),
ParinteID INT
)

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:

ID Relatie Nu me ParintelD ParinteNume Generatie


ntre
1 1 Strabunel Gheorghe Vasilache NULL NULL 0
2 2 Bunica Bena Paduraru 1 Gheorghe Vasilache 1
:dus
3 € Frate bunel. Mihai Vasllache Gheorghe Vasilache
nea,
~ 3
na. Tata Ion Paduraru 2 Bena Paduraru 2
5 4 Un chi Mihai Paduraru 2 Elena Paduraru 2
6 5 Matusa Natalia Manole 2 Elena Paduraru 2
7 7 Frate David Paduraru 3 Ion Paduraru 3
8 8 Sora Sorina Caruntu 3 Ion Paduraru 3
s s Frate Radu Paduraru 3 Ion Padut<>t-.~ ...~

"\~ "\ \i 't:u Sandu Paduraru 3 Ion Paduraru 3

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

9. PROCEDURI STOCATE $1 FUNCTll DEFINITE DE


UTILIZATOR
Capitolul de fa¢ i~i propune sa analizeze cele mai importante aspecte ce tin de tipurile de proceduri
a calea
rma de stocate m SQL Server, structura procedurilor stocate ~i a functiilor definite de utilizator, crearea
procedurilor stocate ~i a functiilor definite de utilizator cu ajutorul instructiunilor SQL m Transact-SQL
Query Editor, dar ~i, folosind interfata grafica SQL Server Management Studio, precum ~i executarea ~i
rtea de modificarea procedurilor stocate [2].
0 procedura stocata sau functie definita de utilizator poate fi comparata cu un modul executabil al
unui program. Procedura stocata sau functia consta mtr-o multime de instructiuni SQL, care realizeaza o
anumita operatie. Cu alte cuvinte, acestea reprezinta un program in SQL.

9. 1. Nofiuni de elaborare a procedurilor stocate

9.1.1. Ce sunt procedurile stocate?


Procedurile stocate in Microsoft SQL Server sunt similare procedurilor scrise in alte limbaje de
programare ~i, deci, acestea:
• Accepta parametri de intrare ~i returneaza multiple valori m forrna de parametri de ie~ire a
procedurii sau grupului de proceduri.
• Contin instructiuni de programare care executa operatii asupra bazei de date, inclusiv de
chemare a altor proceduri.
• Returneaza valoarea de stare a procedurii sau grupului de proceduri pentru a indica succesul sau
e~ecul (~i cauzele e~ecului) procedurii.

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.

9.1.2. C/asificarea procedurilor stocate


Procedurile stocate pot ti grupate in patru categorii principale:
• Proceduri stocate definite de utilizator. 0 procedura definita de utilizator poate fi creata intr-o
baza de date definita de utilizator sau m toate bazele de date de sistem, cu exceptia bazei de date
Resource database. Procedurile stocate pot ti elaborate m limbajul Transact-SQL sau ca _o
trimitere la o metoda a limbajului Common Runtime Language (CLR) de Microsoft .NET
Framework.
• Procedurile stocate temporare reprezinta o forrna de proceduri defmite de utilizator.
Procedurile temporare sunt similare cu cele ale procedurilor permanente, cu exceptia faptului ca
sunt stocate in tempdb. Exista doua tipuri de proceduri temporare: locale ~i globale. Ele difera
una de alta prin numele, vizibilitatea ~i disponibilitatea lor.
Procedurile temporare locale au un prefix comun unic (#). Aceste proceduri sunt vizibile numai
pentru conexiunea curenta a utilizatorului ~i sunt ~terse de indata ce conexiunea este inchisa.
Procetluri stocate # funcfii definite de utilizator

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

9.1.3. Reguli de creare a procedurilor stocate


Existli cateva reguli de creare a procedurilor stocate.
• Deftnitia de creare a procedurii poate include orice tip de numere ~i orice tip de instructiuni
SQL, cu exceptia unor instructiuni. Instructiunile, prezentate in tabelul de mai jos, nu pot fi
utilizate In cadrul procedurilor stocate:
CREATE AGGREGATE CREATE RULE
CREATE DEFAULT CREATE SCHEMA
CREATE sau ALTER FUNCTION CREATE sau ALTER TRIGGER
CREATE sau ALTER PROCEDURE CREATE sau ALTER VIEW
SET PARSEONLY SETSHOWPLAN ALL
SET SHOWPLAN TEXT SET SHOWPLAN XML
USE <nume baza date >
• in cadrul unei proceduri stocate, pot ft create alte obiecte ale baze de date. Un obiect creat poate
fi referit in acee~i procedura stocatli, in cazul in care obiectul este creat inainte de referirea
acestuia in procedurli.
• in cadrul unei proceduri stocate, este posibilii referirea tabelelor temporare.
• Dacli se creeazli un tabel temporar local in interiorul procedurii stocate, el poate fi utilizat numai
in cadrul procedurii date ~i dispare atunci cand procedura stocatli este plirlisitli.
• Dacli se executli o procedura stocatli care apeleaza o altli procedura stocatli, atunci procedura
stocatli apelatli poate accesa toate obiectele create de prima procedura, inclusiv tabelele
tempo rare.
• Numiirul maximal de parametri intr-o procedurli stocatli poate fi 2100.
• Numlirul maximal de variabile locale intr-o procedurli stocatli este limitat numai de memoria
disponibila.
• in functie de memoria disponibila, dimensiunea maxima a codului sursa unei proceduri stocate
este de 250 de megaocteti.

9.1.4. Structura procedurilor stocate


0 procedurii stocatli poate fi creatli, folosind instructiunea CREATE PROCEDURE ~i modificata de
instructiunea ALTER PROCEDURE ale limbajului Transact-SQL. Procedura stocatli este compusa din
Proceduri stocate 5i funcfii definite de utilizator

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.

9.2.2. Crearea procedurilor stocate din arborele de obiecte


Pentru crearea de proceduri stocate prin intermediul ~ablonului de procedura din arborele de
obiecte, se executa urmatorii p~i:
1. in SQL Server Management Studio, se extinde un grup de servere ~i apoi se extinde un
server din arborele Object Explorer.
Proceduri .5tocate ~ifuncfii definite de utilizator

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.

Inainte de executarea operatiunii de creare a procedurii stocate, trehuie sa ne asiguram ca procedura


este corecta din punct de vedere sintactic. Pentru aceasta, e suficient sa se aplice un click pe hutonul Parse
./ , care se gase~te pe hara de instrumente a ferestrei. Dupa ce toate datele necesare sunt inserate m
~ablonul de creare a procedurii ~i analiza este finalizata cu succes, se apasa hutonul Execute de pe hara de
instrumente.

9.3. Executarea procedurilor stocate


9.3.1. Executarea procedurilor stocate in Transact-SQL Query Editor
Pentru executarea procedurii stocate mTransact-SQL Query Editor, se parcurg urmatorii p~i:
1. Se deschide Transact-SQL Query Editor.
2. In spatiul oferit pentru.tiparirea instructiunilor SQL, se scrie:
EXECUTE ori EXEC <numele procedurii stocate> <valoarea parametru>.
in urrnatoarea fereastra, de exemplu, se afi~eaza instructiunea de executare a procedurii stocate
create anterior:

USE universi t atea


GO
-· /!K. 1 :ii: /
EXECUTE test2 .
• ! EXECUTE test 2 @A11u b :2001
/" 2
;x 3 .~ /
EXECUTE test2 2001 ,
!'' 4 "J
I EXECUTE test2 @Anu l =2001 , @Adresa :.: 'mun%' ,
/"" s .;.;;; I
I EXECUTE test 2 @Adre sa•: 'mun%'. @Anu l •2001
I
/:i.' 1s '~
I
;
EXECUTE t e st 2 2.001 . 'mun%';

121 %

ml Results ~'i Messages


Nume - Student Prenume - Student Data - Nast ere - Student .!\.dresa - Poslala - Student
..............................
1 Brasov1anu Teodora 200(}-11 -24 mun . Chisinau . sir. Tighina . 23/3
2 Coso~·anu Geanina 2000-08-04 mun. Chisinau . bd . Decebal. 7£
n,~ ., ~ o ........~ ... . . 1!1J1Jl nc T 1: ...,.,, ... rh;..,,,......,, , h.> T~ , , ~ '1~

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.

Urmeaza un exemplu cu utilizarea parametrilor OUTPUT:

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;

SELECT * FROM #sp_output;


in cazul ID care se creeaza o procedura stocata, listing-ul ei este salvat in tabelul SysComments.
Acest listing nu se salveaza cu scopul executarii procedurii, ci cu scopul modificarii posibile ulterioare.
1emarea Procedura stocata de sistem sp_ helptext poate extrage codul initial al procedurii stocate din tabelul
e'. Mai SysComments, precum este prezentat ill figura de mai jos:
afi~a un
rriabilei USE universitatea ;
2 GO
;utare a ' - sp_helptext test1 ,
~sajelor
121 %
l). Este
~'j Results
Tex::
ecutare
-client. CREJl..TE ERCCEDURE i:e5'Cl
ilizand AS
SE I,EC':: Nmr.e _Stude:--1i:, Pre:i mr.e _ St i.:: der1i:, :::ata _ Nastere _Stud e nt
::ROH 5t u dent::. W:iE::<E r: ata Naste:::e Stt.:d e:it < '2 GOG - Gl - 0 1' ;
server
iltatele
9.3.2. Executarea procedurilor stocate in SQL Server Management Studio
clauza Pentru executarea procedurii stocate, folosind interfata SQL Server Management Studio, se parcurg
nul de urmatorii p~i:
1. in SQL Server Management Studio, se extinde un grup de servere ~i apoi se extinde un
Lmetrii server din Object Explorer.
clauza 2. Se extinde Databases ~i apoi se extinde baza de date ID care se creeaza procedura.
: va fi
3. Se extinde Programmability ~i apoi se executa un click pe dosarul Stored Procedures.
Proceduri stocate §i June/ii de.finite de utilizator

4. Apoi, in lista de proceduri stocate ce apare in campul de lucru, se face un click-drept pe


procedura necesara
5. in meniul de context aparut, se alege Execute stored procedure
in consecintA, apare urmatoarea fereastra in care pot fi setate valorile parametrilor de intrare
(coloana Value). Sau sunt lasate vide. in acest caz, sistemul va utiliza valorile implicite, daca ele sunt
definite in procedura stocata respectiva. Daca nu, atunci, pentru a evita erorile de executare, completarea
acestui camp devine obligatorie.

Execute Procedure · [dboJ.{test2J


Select a -
l- Generai

Parameter Data Type Output Parameter Pass Null Value Value


@Anul smaHint No [J 1999
....................... \
@Adresa varchar(255) No [J ~: Balti ~;
.............................................!

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 %

Iii Results ~'II Messages


Nume _Student Prenume _Student Data_Nastere _Studer-rt .A.dresa_Postala_Student
lrimus .Andrei 1SSW3-n mun. Balti . str. Piata Vasile Alecsandri , 4

Return Value
Proceduri stocate li funcfii definite de utilizator

rept pe 9.4. Modificarea procedurilor stocate


Modificarea procedurii stocate, folosind interfata SQL Server Management Studio, este similara cu
executarea procedurii stocate numai ca, in locul selectarii optiunii Execute stored procedure in meniul de
intrare context aparut, se alege Modify.
ele sunt in cazul in care se aplica un click pe optiunea Modify, automat se deschide mediul Transact-SQL
pletarea Query Editor, unde pot fi realizate modificarile considerate necesare. in exemplul dat, se exclude o
valoare prestabilita a parametrilor din procedura test2. Aici, definirea parametrilor de intrare este
obligatorie ~i in cazul cand utilizatorul uita sa-i introduca, sistemul va detecta o eroare. Dupa modificarile
necesare, se apasa butonul Execute. in consecintii, pe fila Results trebuie sa apara un mesaj de executare
re~itii.

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

Executarea procedurii a generat un mesaj de eroare, deoarece nu erau specificate valorile


parametrilor de intrare.

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).

9.5.1. Funcfii de tip scalar


Functiile scalare returneaza un singur rezultat scalar. Acest rezultat poate fi de orice tip, cu exceptia
tipurilor TEXT, NTEXT, IMAGE ~i TIMESTAMP. Ea reprezinta cea mai simpla forma a functiei.
Pentru a crea o astfel de functie, se va utiliza instructiunea CREATE FUNCTION, a ciirei sintaxa
simplificata este urmatoarea:

CREATE FUNCTION [<nume_schema>.]<nume_functie>


( [ { <@nume_parametru> [AS] [<tip_nume_schema>.]<tip_date_parametru>
[=<valoare_implicita>] [ READONLY ]} [ , ... n] ] )
RETURNS <tip_date_returnat>
[WITH <optiune_functie> [ , ... n] ]
[AS]
BEGIN
<corp_functie>
RETURN <expresie_scalar>
END
unde:
• <numeJunc/ie> - declararea numelui functiei.
• <nume_schemii>- numele schemei existente, care poseda functia definita de utilizator.
• <@flume_parametru> - reprezinta numele unui parametru formal din lista de parametri.
• {<tip_ nume_ schema>.]<tip_date_parametru> - reprezinta tipul unui parametru formal ~i,
optional, numele schemei lui.
• =<valoare_ implicita> - exprima o valoare implicita pentru parametru. Functia poate fi
executata fiira a fi specificata o valoare pentru acest parametru.
• READONLY - indica faptul ca parametrul nu poate fi actualizat sau modificat in definitia
functiei. in cazul in care parametru este de tip tabel definit de utilizator, trebuie sa fie precizat
cuviintul-cheie READONLY.
• WITH <op/iuneJuncfie> - pentru a specifica diverse optiuni pentru functie. De exemplu,
optiunea ENCRYPTION cripteazii codul din tabelul de sistem, iar SCHEMABINDING permite
sa lege functia cu toate obiectele bazei de date (schema) la care se refera. in acest caz,
suprimarea ~i actualizarea oriciirui obiect al bazei de date, legatura cu functia este imposibila
fiira schimbarea propriei functii.
• <tip_date_returnat> - se precizeaza tipul de date al valorii returnate de functie.
• <expresie_scalar> - valoare de return at.
• <corpJuncfie> - in functii scalare, reprezinta un set de instructiuni Transact-SQL, care,
impreunii, returneazii o valoare scalara.
Mai intai, se considera urmatorul exemplu - o functie scalara. Se creeaza o functie, care, din douA
numere lntregi, aplicate in calitate de parametri de intrare, va alege eel mai mic:

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

itm IF @a<@b SET @c=@a


nat, ELSE SET @c= @b
bel RETURN @c
END
Dupa clauzele CREATE FUNCTION, se specifica numele functiei. Mai departe, urmeaza
parametrii, care se dau intre paranteze rotunde, toate despaqite prin virgula. Aceasta prezentare este
ptia diferita de cea a procedurilor stocate. Apoi, dupa cuvantul-cheie RETURNS se precizeaza tipul de date de
tip scalar al valorii returnate de functie. in corpul functiei, intre BEGIN ~i END este inclusa structura
altemativa IF. .. ELSE ~i declaratii de variabila, @c.
taxa
Odata ce functia este creata, poata fi folosita pentru a returna valoarea:

SQLQuery7.sql - MV ... a (MV\ marian (59))" ·b X


.1. - PRINT dbo . mi n num' 10 20
- - sa ~

SELECT dbo . min_n um \ 4 , 7 ,

121 %
~'II Results
10

( 1 r o w a f f e cc ed )

Se dore~te sa se realizeze o functie care va receptiona un parametru de intrare de tip DATETIME ~i


va retuma ora de la 'inceputul zilei. De exemplu, In cazul 'in care parametrul de intrare este 25 .03 .15 13 :31
(13:31 25 martie 2015), rezultatul va fi 'inceputul din 25 martie - 25.03.15 0:0.

DROP FUNCTION IF EXISTS zl_inceput;


GO
CREATE FUNCTION dbo. zl_inceput (@dat DATETIME)
nitia RETURNS SMALLDATETIME AS
::izat BEGIN
RETURN CONVERT(DATETIME, FLOOR(CONVERT(FLOAT, @dat)))
1plu, END
mite Functia CONVERT converte~te un numar dintr-un sistem de. masura in altul (de exemplu,
caz, CONVERT poate transforma un tabel cu distante in mile intr-un tabel cu distante in kilometri). Mai intai,
ibila tipul de date DATETIME este transformat 'in tip FLOAT. Cu aceasta forma transformata, partea intreaga
reprezinta numarul de zile, incepiind cu 1 ianuarie 1900, iar partea fractionara - timpul. Mai departe, se
petrece o rotunjire piina la eel mai mic numar intreg, folosind functia FLOOR ~i, din nou, se aduce la tipul
de fonnat DATETIME, dar timpul deja a cazut la 0:0.
\are, Urrneaza un exemplu de testare a functiei, unde functia GETDATE() - intoarce data ~i ora curenta a
sistemului:
loua
SQLQuery7.sql - MV ... a (lv1V\ marian (59))* -i. X Object Explorer Oeta1ls lab8 queries.sq!-..
_ - SELE CT dbo zl_in ceput GETDATE · AS inceput ul_zilei
121 ''/o -

ml Results rn'I! Messages


inceputul _zilei
2.ll1 lHl2-1700:00:00 :
Proceduri stocate §i funcfii definite de utilizator

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.

DROP FUNCTION IF EXISTS GetTotal


GO
CREATE FUNCTION GetTotal(@Nume VARCHAR(60), @Prenume VARCHAR(60))
RETURNS INT
BEGIN
DECLARE @Total INT
SELECT @Total = SUM(r.Nota)
FROM studenti reusita r JOIN studenti s ON r.Id Student=s.Id Student
WHERE Nume_Student = @Nume AND Prenume Student =@Prenume
RETURN @Total
END
in aceste 2 exemple, SELECT returneaza rezultatul executiirii functiei GetTotal. Functia apaqine
schemei dbo. Dupa nume, in paranteze sunt enumerati parametrii in acee~i ordine ca ~i in declaratia
functiei.

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 %

ml Results [§!ii Messages


Total

Nume - Student Prenume - Student Total


......... ..................... ,
Brasovianu
... .............................
Teodora 28B
2 Cosovanu Geanina 234
3 Coste Oaudia 225

Numele complet al unei functii este dat de urmiitorul specificator:

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.

9.5.2. Funcfii de tip tabel simplu


Functia de tip Inline nu returneazii in calitate de rezultat o valoare scalarii, ci intregul tabel, sau, mai
degrabii, un set de date. Acest lucru poate fi foarte convenabil in cazul in care in diverse proceduri,
declan~atoare etc. se aplica una ~i acee~i subinterogare. Astfel, in loc de a scrie aceastii interogare, poate
fi creatii o functie ~i folosita in continuare. Functia devine ~i mai utilii, in cazul in care tabelul returnat este
dependent de parametri de intrare. Dupii cum se cuno~te, viziunile nu pot avea parametri, prin urmare,
aceastii problemii poate fi solutionata cu ajutorul functiei de tip tabel. Caracteristica principalii a functiei
de tip tabel simplu constii in faptul cii functia poate contine numai o singurii interogare in corpul sau.
Adicii, functiile Inline sunt foarte asemiiniitoare viziunilor, dar, in plus, pot avea parametri de intrare.
Proceduri stocate si funcfii definite de utilizator

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

• CREATE FUNCTION disciplina_ore(@Ore INT)


RETURNS TABLE
WITH ENCRYPTION
AS
RETURN
(SELECT Disciplina, Nr_ore_plan_disciplina
:al FROM discipline
WHERE Nr_ore_plan_disciplina <@Ore);
0 functie Inline returneaza un tabel ca rezultat, tara a fi nevoie sa se defineasca explicit structura
acestuia. Liniile ~i coloanele sunt definite de o singura comanda SELECT. Cu alte cuvinte, nu sunt permise
blocuri BEGIN ... END.
Fiecare camp din interogarea-sursa trebuie sa aiba un nume, ceea ce inseamna ca expresiile cu mai
multi operanzi trebuie sa aiba neaparat un alias. in afara de aceasta, utilizarea clauzei ORDER BY este
admisa numai daca se folose~te impreuna cu TOP in instructiunea SELECT.
Apelul unei functii de acest tip se poate realiza facand referire la clauza FROM a instructiunii
SELECT. De exemplu:

SQLQuer;7 ..sql - MV ... a (MV\marian (59))* ·l=l X Object Explorer Details


_ - SE LECT FROM d bo . disciplina_ore 60 ',
-
.(.,

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:

CREATE FUNCTION [<nume_schema>.]nume_functie


( [ { <@nume_parametru> [AS] [<tip_nume_schema>.]<tip_date_parametru>
[=<valoare_implicita>] [ READONLY ]} [ , ... n] ] )
RETURNS <@variabila_returnata> TABLE <definitie_tip_tabel>
[WITH <optiune_functie> [ , ••• n ] ]
[AS]
BEGIN
<corp_functie>
RETURN
END [ ; ]
unde:
• <.defini/ie_tip_ tabel> - descrierea tabelului (coloane ~i constrangeri) care va prezenta
rezultatul. Tabelul este, intotdeauna, plasat in grupul de fi~iere primare
• <corpJunc/ie> - in functiile de tip tabel multi-instructiune, corpul functiei reprezinta unset de
instructiuni Transact-SQL, care populeaza variabila TABEL returnata
Conform sintaxei functiei de tip tabel multi-instructiune, aceasta se aseamana foarte mult cu
structura functiei scalare. Primele trei linii sunt neschimbate. in sectiunea RETURNS e declarata o
variabila care este de tip TABLE. Dupa aceea, in paranteze, trebuie sa fie descrise cfunpurile tabelului
dezirabil. Dupa cuvantul-cheie AS, urmeaza blocul BEGIN ~i END, intre care se poate executa orice numar
de instructiuni. Blocul se termina cu cuvantul rezervat RETURN.
Totu~i, exista o deosebire de functiile scalare - dupa RETURN, se specifica numele variabilei, a
carei valoare ar trebui sa fie rezultatul. in cazul dat, nu trebuie sa fie specificat nimic. Declararea variabilei
a fost deja efectuata in sectiunea RETURNS ~i descris formatul acestei variabile. Corpul functiei poate ~i
trebuie sa umple aceasta variabila cu valori ~i inclusa in rezultat.
Acum, se ia in considerare un exemplu, care poate fi executat doar cu functie de tip tabel multi-
instructiune ~i nu poate fi rulat cu functie Inline. Functiile multi-instructiune returneaza un tabel rezultat,
fiind necesara ~i definirea structurii acestuia. Aceasta categorie poate include crearea de secvente de cod
mult mai sofisticate.

DROP FUNCTION IF EXISTS GetTotal2


GO
CREATE FUNCTION GetTotal2 (@Grupa CHAR(6))
RETURNS @ret TABLE
(Nume VARCHAR(120), Suma Baluri SMALLINT, Grupa CHAR(6))
AS
BEGIN
IF NOT EXISTS (SELECT Cod_grupa
FROM grupe WHERE Cod_Grupa = @Grupa) RETURN
INSERT @ret
SELECT s.Nume_Student+' '+s.Prenume_Student, SUM(r.Nota),g.Cod_Grupa
FROM studenti reusita r JOIN studenti s ON r.Id_Student=s.Id_Student
JOIN grupe g ON r.Id_Grupa = g.Id_Grupa
WHERE Cod_Grupa = @Grupa
GROUP BY s.Nume_Student,s.Prenume_Student,g.Cod_Grupa
RETURN
END
in exemplul de fatA, este definita o functie de tip tabel multi-instructiune cu numele GetTotal2 cu un
parametru de intrare - @Grupa. in calitate de rezultat, este declarata variabila @ret, care reprezinta un
Proceduri stocate §i funcfii definite de utilizator

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 :

S.QL0uEry3.sql - MV... a (MV\marian (67))* -t;i X update DB.sq! - MV ... a {M


~ - SE LECT " FROM dbo . GetTota l 2 · 'TI171 1 '

2
. 1.21 '%

ml Results ~11 Messages


Nume Suma Balun Grupa
:··················································'
!....................................................
Nicolae Radu :
3-62 Tl1 71
2 Linear .Alexandra 354 Tl171
3 Popa Mihaela 335 Tl1 71
4 Nicolescu .Aurel 3SJ Tl1 71
.. n,,..,r;:,J R.-.rin;:, Y4. Tl171

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.

9.5.4.2. Suprimarea funcfiilor definite de utilizator


Suprimarea functiei definite de utilizator, ca ~i a procedurii stocate sau a oricarui alt obiect al bazei
de date, poate fi tacuta in doua moduri. Prima - este metoda grafica. Aceasta metoda nu va fi detaliata,
deoarece este asemanatoare pentru toate obiectele bazei de date. Este suficient sa se extindii, in
exploratorul de obiecte, nodurile corespunzatoare caii spre functia dorita, sa se aplice un click-dreapta pe
ea ~i sa se selecteze optiunea DELETE.
n
Proceduri ,5tocate §i /uncfii definite de utilizator

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:

DROP FUNCTION { [<nume_schema>.] <nume_functie>} [ , ... n]


Instructiunea DROP FUNCTION realizeaza ~tergerea functiei definite de utilizator de orice tip.
Dupa aceasta instructiune, trebuie sa fie specificat doar numele functiei.

9. 6. Funcfiile definite de utilizator VS proceduri stocate


Functiile definite de utilizator ~i procedurile stocate sunt obiecte SQL Server, care stocheaza unul
sau mai multe instructiuni Transact-SQL sub un singur nume, sub forma unei rutine executabile. De~i pot
fi puse in aplicare acele~i functionalitati sau similare, folosind fie o functie definita de utilizator, fie o
procedura stocata, codul va fi semnificativ diferit in functie de tehnica aleasa.
Avantajele folosirii procedurilor stocate sau functiilor definite de utilizator sunt urmatoarele:
• 0 procedura sau o functie odata creata este stocata in baza de date ~i poate fi apelata ori de cate
ori este necesar.
• Procedurile stocate ~i functiile definite de utilizator reduc costurile de compilare a codului
Transact-SQL, mentinand in cache planurile pentru reutilizare in curs de executare repetata. Prin
urmare, acestea nu trebuie sa fie reanalizate ~i reoptimizate pentru fiecare utilizare, reduc
semnificativ timpii de executie.
• Elementele de control ale unei proceduri sau functii sunt executate ca un singur lot de coduri.
Acest lucru poate reduce considerabil traficul de retea intre server ~i client, deoarece este trimis
prin retea numai apelul pentru rularea procedurii sau functiei.
Principalele diferente dintre procedurile stocate ~i functiile definite de utilizator [30]:
• 0 functie definita de utilizator trebuie sa returneze un rezultat constituit dintr-un singur set. 0
procedura stocata poate, la randul sau returna o valoare sau chiar mai multe seturi de rezultate
sau chiar sa nu returneze nimic.
• 0 functie definita de utilizator e apelata ca o expresie ~i accepta numai parametri de intrare.
Procedurile stocate accepta parametrii de intrare de la ~i pot returna valori prin parametri de
ie~ire catre un program apelant.
• 0 functie definita de utilizator poate fi apelata din procedura, in timp ce o procedura nu poate fi
apelata din functia definita de utilizator.
Proceduri stocate $ifuncfii definite de utilizator

• 0 functie definita de utilizator nu poate fi folosita in unele functii non-deterministice (care


returneaza un rezultat diferit cu acel~i parametru de intrare), precum NEWID(),
NEWSEQUENTIALIDO, RAND() sau TEXTPTRO, in timp ce o procedura stocata poate utiliza
aceste functii.
• 0 functie definita de utilizator opre~te intotdeauna executarea codului, in caz de eroare, in timp
ce, cu o procedura stocata, poate continua pana la urmatoarea instructiune, folosind codul de
gestiune a erorii corespunzator.
• 0 instructiune SET nu poate fi autorizata intr-o functie definita de utilizator, in timp ce o
procedura stocata - poate.
• 0 functie definita de utilizator nu poate fi autorizata de clauza FOR XML . Rezultatul FOR XML
poate fi folosit intr-o procedura stocata.
• 0 functie definita de utilizator nu admite executarea actiunilor care modifica starea bazei de
date, in schimb o procedura stocata - poate.

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.

10.1. Clasificarea tipologica !ji structura declan!jatoarelor


Declan~atoarele sunt o clasa speciala de proceduri stocate, asociate unui tahel sau unei haze de date,
sau unei instante SQL Server, definite pentru a fi lansate in executie, in mod automat, la initierea unui
eveniment ~i reprezinta un instrument putemic pentru elaborarea hazelor de date active.
Aria de utilizare a declan~atoarelor este cat se poate de extinsa: implementarea constrangerilor
complexe, asigurarea integritatii hazei de date, managementul securitatii datelor, respectarea integritatii
referentiale intre nodurile unei haze de date distrihuite, jurnalizarea operatiunilor (tranzactiilor),
sincronizarea replicilor unei haze de date etc.
Dupa destinatie ~i modul de utilizare, SQL Server ofera trei tipuri generale de declan~atoare: DML,
DDL ~i LOGON [14].

10.1.1. Dec/an!jatoare DML


Declan~atoarele DML sunt lansate atunci cand in haza de date are loc un eveniment al limhajului de
manipulare a datelor. Evenimentele DML sunt reprezentate instructiunile INSERT, UPDATE sau
DELETE, care actualizeaza datele unui tahel sau viziuni. Un declan~ator DML poate interoga alte tahele ~i
poate confine instructiuni Transact-SQL complexe. Atat declan~atorul, cat ~i instructiunea care 1-a lansat,
sunt tratate ca o singura tranzactie care poate fi anulata, in caz de e~ec, ~i atunci, in acest declan~ator, sunt
restabilite schimharile. Daca este detectata vreo eroare a serverului (de exemplu, insuficienta de spatiu pe
disc), tranzactia este anulata iar starea hazei de date de pana la lansarea tranzactiei este restahilita.
Declan~atoarele pot modifica in cascada tahelele din haza de date, insa aceste modificari pot fi
executate mai eficient, utilizand constrangerile de integritate referentiale in cascada.
in schimh, declan~atoarele pot detecta operatiile INSERT, UPDATE ~i DELETE incorecte sau rele
cu premeditare ~i sa impuna alte restrictii mai complexe, decat cele ce pot fi definite cu constrangerea
CHECK.
De exemplu, un declan~ator poate utiliza un SELECT deftnit asupra altui tahel, pentru a compara cu
datele inserate sau modificate ~i pentru a executa actiuni aditionale, cum ar fi modificarea datelor sau
af~area unui mesaj de eroare definit de utilizator. De asemenea, declan~atoarele pot evalua starea tahelului
inainte ~i dupa modificare ~i realiza actiuni hazate pe deosehirea detectata.
Diverse declan~atoare DML de acela~i tip (INSERT, UPDATE sau DELETE) definite asupra
acelui~i tabel pot executa actiuni diferite ca raspuns la acelea~i instructiuni de actualizare.
Declan~atoarele sunt utile, mai ales, in crearea constrangerilor ~i consistentelor de acces la haza de
date. Fie, de exemplu, un program de control al stocului. Poate fi elahorat un declan~ator care reactioneaza
la evenimentul ca, dacli un anumit produs atinge cantitatea minima necesarli in stoc, atunci este lansata o
solicitare de cumparare a acestui produs, folosind un raport.
Crearea ~i utilizarea declan~atoare/or

Pot fi mentionate doua din aplicatiile principale ale declan~atoarelor:


• Elaborarea mecanismelor de validare care atrag dupa sine cautiiri in mai multe tabele.
• Actualizarea altor tabele in functie de includerea datelor sau modificarea tabelului curent.
Pot fi programate urmatoarele tipuri de declan~atoare DML:

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.

Instrucpune DML Tabelul inserted Tabelul deleted


INSERT Linii inserate Vid
UPDATE Linii de dupa modificare Linii de pana la modificare
DELETE Vid Linii ce trebuie ~terse
Trebuie mentionat ca in declan~atoarele de tip DML, tabelele deleted ~i inserted sunt, in primul
rand, folosite pentru a efectua:
• Extinderea integritatii referentiale dintre tabele.
• Inserarea sau actualizarea datelor in tabelele utilizate de o viziune.
• Testarea la erori ~i tratarea acestora.
• Depistarea diferentei dintre starea tabelului, inainte ~i dupa modificarea datelor ~i aplicarea unor
actiuni bazate pe diferenta detectata.

10.1.2. Dec/anfatoare DDL


Decl~atoarele DDL au aparut prima data in SQL Server 2005 ~i se utilizeaza pentru controlul
evenimentelor la nivel de baza de date sau la nivel de server. Aceste declan~atoare sunt invocate, daca au
loc in baza de date sau pe server evenimente ale limbajului de definire a datelor (DDL). Decl~atoarele
DDL, asemenea declan~atoarelor regulare, lanseaza o procedura stocata drept raspuns la un eveniment.
insa, spre deosebire de declan~atoarele DML, acestea nu sunt lansate ca raspuns la instructiuni de
tipul UPDATE, INSERT sau DELETE aplicate asupra tabelului sau viziunii. in schimb, sunt puse in
functiune de varietatea de instructiuni de defmire a datelor. Aceste instructiuni sunt cele care incep cu
cuvintele rezervate CREATE, ALTER, DROP, GRANT, DENY, REVOKE sau UPDATE STATISTICS.
Crearea fi utilizarea declan~atoarelor

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.

10.1.4. Structura dec/anfatoarelor


Un declan~ator este campus din doua pfu1:i:
1 primul • Instructiuni SQL care lanseaza declan~atorul: INSERT, DELETE ~i UPDATE pentru un tabel
sau viziune in cazul declan~atorului DML sau CREATE, ALTER, DROP, GRANT, DENY,
REVOKE sau UPDATE STATISTICS pentru un server intreg sau baza de date in cazul
declan~atorului DDL.
• Actiunea exercitatii de declan~ator: in realitate, este un bloc de instructiuni SQL, care vor fi
executate de declan~ator.
ea unor
Unele instructiuni nu pot fi utilizate de declan~atorul DML. Acestea sunt afi~ate mai jos. 0 parte din
ele, fiind necunoscute, vor fi tratate mai tarziu:

1ntrolul ALTER DATABASE • CREATEDATABASE : DROP DATABASE


laca au RESTORE DATABASE RESTORE LOG 1 RECONFIGURE
toarele
nt.
uni de
use m
~ep cu

;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.

CREATE TRIGGER [nume_chema.] nume declansator


ON { tabel I viziune }
[WITH <optiune_declan~ator_dml > [ , ••. n ] ]
{ FOR I AFTER I INSTEAD OF }
{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }
[ NOT FOR REPLICATION ]
AS { instructiune_sql [ ; ] [ , ... n]
I EXTERNAL NAME <specificator metoda ] > }
<optiune_dml_declansator> ··-
[ ENCRYPTION ]
[ EXECUTE AS Clauza ]
<specificator_metoda> ::=
nume - bloc.nume- clasa.nume metoda
Declan~atorul DDL apeleaza la instructiunile CREATE, ALTER, DROP, GRANT, DENY, REVOKE,
UPDATE STA TISTICS ~i are urmatoarea structura generala:

CREATE TRIGGER nume declansator


ON { ALL SERVER I DATABASE }
[WITH <optiune_declansator_ddl> [ , ... n] ]
{FOR I AFTER} {tip_eveniment I grup_eveniment} [ , ... n
AS {instructiune_sql [ ; ] [ , ... n]
I EXTERNAL NAME <specificator metoda> [ ; ] }
<optiune_ddl_trigger> : :=
[ ENCRYPTION ]
[ EXECUTE AS Clauza ]
Sintaxa pentru crearea unui declan~ator sistem (Logan) este urmatoarea:

CREATE TRIGGER nume_declan~ator


ON ALL SERVER
[WITH <optiune_declansator_logon> [ , ... n] ]
{ FOR I AFTER } LOGON
AS {instructiune_sql [ ; ] [ , ... n]
I EXTERNAL NAME <specificator metoda> , ] }
<optiune_declan~ator_logon> ...·--
[ ENCRYPTION ]
[ EXECUTE AS Clauza ]
Crearea ~i utilizarea declan~atoarelor

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.

nume declansa tor


Numele declan~atorului trebuie sa fie definit in conformitate cu normele de identificare. Unica
constrangere suplimentara consta in faptul ca un nume de declan~ator nu poate incepe cu # sau # #.

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.

{ [DELETE] [,] [INSERT] [,] [UPDATE] }


Specifica instructiunile de actualizare a datelor care provoaca lansarea declan~atorului. Cel putin o
optiune din aceste trei trebuie sa fie specificata. Se permite sa fie incluse in definitia declan~atorului
orice combinatie din aceste trei operatii ~i in orice ordine.
Pentru declan~atoarele INSTEAD OF, optiunea DELETE nu este permisa asupra tabelelor care au
legaturi referentiale constranse de actiunea de ~tergere in cascada referinta specificand o actiune
DELETE cascada (cascade action ON DELETE). In mod similar, nu sunt admise declan~atoare
INSTEAD OF cu optiunea UPDATE definite asupra tabelelor care au legaturi referentiale cu
specificatia de modificare in cascada (cascade action ON UPDATE).

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.

NOT FOR REPLICATION


Indica faptul ca declan~atorul nu trebuie sa fie executat in cazul in care vreun agent de replicare
modifica tabelul implicat in declan~ator.

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

10.2. Crearea, activarea fi dezactivarea declanfatoarelor


alizare Pentru crearea declan~atoarelor in MS SQL Server 201 7, se utilizeaza mediul Transact-SQL Query
DL sau Editor. in continuare, sunt examinate cateva exemple de creare a declan~atoarelor.

pentru 10.2.1. Crearea declan!jatoarelor DML


iunilor
Se prezinta un declan~ator DML, care genereaza un mesaj de informare. in acest declan~ator, se
TEAD
specificii faptul ca pentru tabelul orarul creat in capitolul 6, la includerea unei inregistrari noi, va fi
generat un mesaj "0 noua fnregistrare a Jost inclus a cu succes ". Cu acest scop, dupa clauza AS, se scrie
clauza comanda PRINT ~i mesajul respectiv.
buie sa
e de a USE universitatea
GO
DROP TRIGGER IF EXISTS dbo.inregistrare_noua
GO
putin o CREATE TRIGGER inregistrare_noua ON orarul
torului AFTER INSERT
AS
are au PRINT 'O noua inregistrare a fost inclusa cu succes'
cpune GO
1atoare Acum se poate scrie o instructiune de control, care insereaza in tabelul orarul o inregistrare noua ~i
ale cu verifica rezultatul lucrului declan~atorului. in plus, se cere lista tuturor inregistrarilor tabelului in cauza.

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

Iicare 108 1 0~ 2 Le 02 : 00 : 00 . 000GGOO 50 1 B

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

USE univers i tate a


GO
DROP TRIGGER IF E! l.:- 'S dbo . l ectii_L uni
GO
- CREATE TRIGGER ~<;J:i i ~~ ON o r arul
AHER UPDATE.DELETE
AS
.~ DECLARE @zi CHAR( 2
DECLARE @me ss age VARCHAR 500 - CONCAT 'f\tentie, luni trebuie sa fie eel putin o lectie. ',CHAR , 13
10 SELECT @z.i COUtff. Zi · FROM o r arul o l•JHERE Zi ·• 'Lu'
IF @z.i " 0
, - BEGIN
RAISERROR @mes s age 16, 1'
ROLLBACK TRANSACTION
1: ENO
.1 . GO

.1 :3 DELE'TE FROM orar ul \~HERE Zi c' Lu'


121 %1 ..

@'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..

H3g 3€0'.?, :..eve.:. 1€, State l, :.:..:-..~ le


:he ::?:an3act.:cr. e.nd~:.l :.n the t:::-.:.gqe=:. the batch ha;i be~n ab-::-n::ed.

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.

USE unive rs itatea


GO
- ALTER TRIGGER inregist r are_noua ON o r aru l
AFTER UPDATE
::- AS SET NOCOUNT ON
[:, -- IF UPDATE fAud i toriu )
SELECT 'Lectia la disciplina •• - UPPER , d . D i s c i p l ina l~
"! '" de la ora '"-CAST i ns ert ed . Ora AS VARCHAR ( 5 ' ....
' a fost tranferata in auia '-CAST i ns erted . Aud i t or i u AS CHAR· 3
_0 FROM in serted ~o= · d is ci pline d ON i nserted . I d_Di s cip l ina :. d Id_Discipli na
GO

- UPDATE or a ru l SET Auditor i u =510 WHERE Zi = ' Lu'


121 %
@It Results

( 1 r aw ~ ff e c ce d l
Crearea ~; utilizarea declan~atoarelor

10.2.2. Crearea declanfatoarelor DDL


Urmatorul exemplu ilustreaza modul in care un declan~ator DDL poate fi utilizat pentru prevenirea
modificarii schemei unui tabel sau suprimarii unui tabel din baza de date:

1 USE uni v ersitatea ;


GO
AR\13
DROP TRIGGER IF 1~:-.1s-5 sigura nta ON DATABASE
4 GO
- CREATE TRIGGER siguran t a
Dr·I DATABASE
FOR DROP _TABLE _, ALTER TABLE
E AS
c - PRINT 'Atentie, modificarea schemei bazei de date este interzisa,
_0 pentru a continua adresati-va administratorului de system'
SELECT EVENTDATAl l . value
t2 1 ' (/EVENT_INSTANCE/TSQLCommand/CommandText)[l]', 'nvarchar(max) ' )

ROLLBACK ;
1~ GO

- DROP TABLE orar ul ,


121 % ~

sen in ~'I Results


Ar;entie , rr.c d if:. .= a re a scb err.e.:. b aze.:. d e d at e e 3 te int e r z i 3 a ,
ajul de
peni;; r u a coni;; ::. rma a dr eaa t ::.-v a ai·niniaCratc·r u l u i de sys-ce::n

DRO? T.AE :..E c r a r u .l


DROP.
11 r c w affeci::ed)

tabelul g3g 36D9, ~eve: 16, State 2, ~~~e 16


tre este 7h~ -:ra!'".i$-5Ct:i~::-~ ::-Jded :.:-. -c~e t:::..gge=. The. t.a.-cch ha~ been ab::r1:ed.

Pentru ~tergerea un declan~ator DDL defmit ON DATABASE, in instructiune DROP, de asemenea,


se adauga conditia ON DATABASE [23]. Pentru a controla functionalitatea declan~atorului siguranta, in
final, se da la executare o instructiune de ~tergere a tabelului orarul.
Informatiile despre un eveniment ce lanseaza un declan~ator DDL pot fi capturate, apeland la
functia EVENTDATA . in urma utilizarii acestei functii, in mesajul aparut, se afi~eaza evenimentul care a
lansat declan~atorul respectiv (in cazul nostru DROP TABLE oraru{).

10.2.3. Crearea declanfatoarelor LOGON


Urmeaza un exemplu de declan~ator LOGON.

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

CREATE TRIGGER limit sesiuni


ON ALL SERVER WITH EXECUTE AS 'userl'
FOR LOGON
AS
Crearea ~i utilizarea declan1atoarelor

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.

10.2.4. Activarea fi dezactivarea declanfatoarelor


Declan~atoarele pot fi dezactivate sau activate. Activarea unui declan~ator nu inseamna recrearea
declan~atorului. Un declan~ator dezactivat ramane in calitate de obiect in baza de date curenta, dar el nu se
declan~eaza. Activarea declan~atorului presupune ca acesta va fi lansat, daca se executa orice tranzactie
pentru care a fost programat.
Pentru a activa sau dezactiva un declan~ator, sunt utilizate instructiunile ENABLE TRIGGER ~i
DISABLE TRIGGER, respectiv.
in continuare, este dezactivat declan~atorul DML inregistrare_noua care a fost creat pe tabelul
orarul ~i apoi este activat din nou:

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

Urmatorul exemplu activeaza toate declan~atoarele DDL la nivelul unui server.

USE universitatea
GO
ENABLE TRIGGER ALL ON ALL SERVER;

10.3. Dec/anfatoarele fi procedurile stocate standard


ogin
unea in mediul SQL Server Management Studio declan~atoarele la nivel de baza de date se afla in
rver dosarul Programability al ferestrei Object Explorer. Declan~atoarele de acest nivel pot fl u~or programate,
dar nu pot fl modificate atat de u~or, ca alte obiecte-program, precum, de exemplu, procedurile stocate.
Declan~atoarele la nivel de server se gasesc in dosarul Server Objects al ferestrei Object Explorer.
ntru
Pentru a obtine lista declan~atoarelor ce se afla in baza de date curenta este necesar sa se scrie
interogarea asupra viziunilor sys.triggers ~i sys.trigger_events. Pentru a obtine lista declan~atoarelor la
unui nivel de server, se scriu interogari asupra sys.server_triggers ~i sys.server_trigger_events .
rver.
dat. Se pot determina toate decl~atoarele DML definite asupra unui tabel al bazei de date, folosind o
procedura stocata de sistem sp_helptrigger [47). Sa se observe urmatoarea instructiune, care sustine acest
obiectiv:

earea
_ -:- SP HELPTRIGGER orarul' 1

nu se
~ctie 121 %

!m Results ~'i Messages


trigger_name trigger_0•1mer isupdate isdelete isinsert isafter isinsteadof trigger_schema
,................................................ ._
dbo {} 0 {} dbo
'.>elul
2 dbo 0 {] dbo

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:

-SP HELPTEXT inregistrare_noua ;


2
121 %

ml P.esults ~'11 Messages


Text
..........................
'ER CREATE TRIGGER inregistrare_noua ON orarul
2 /1.FTER UPD.ATE
3 AS SET NOCOUNT ON
.d IF IJPDATE{.ALJditoriu)
5 SELECT Lectie de ,. ..... UPPER(d.Disc1plina}'-
£ ···de la ora .... CAST!)nserted .Ora AS VARCH.A.R{5})-
i a fost tranferata 1n aula ....CAST~nserted ..Al.Jditoriu .A.S CHAR.{3)}
g FROM inserted JOIN disciplined ON inserted .ld_Oisciplina = d.ld_Disciplina

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

11. RECUPERAREA BAZEi DE DATE


in capitolul de fatA sunt prezentate problematicile cu privire la importanta ~i utilitatea practicli a
copiilor de rezervli, regulile de creare a copiilor ~i formele de recuperare a datelor, principalele tipuri de
dispozitive necesare pentru copiile de rezervli ~i diferite metode de realizare a copiilor de rezervli ~i de
recuperare a datelor, precum ~i vizualizarea proprietatilor copiilor de rezervli [4].
Microsoft SQL Server permite crearea copiilor de rezervli ~i recuperarea bazei de date.
Componentele de recuperare ~i restaurare oferli o protectie serioasli a datelor stocate in bazele de date SQL
Server. 0 strategie bine planificatli de creare a copiilor de rezervli ~i restaurare asigurli protejarea bazelor
de date 1mpotriva pierderilor de date cauzate de o serie de e~ecuri.

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

11. 1. Modele de recuperare $i tipuri de backupuri


·o r
11.1.1. Modele de recuperare
Operatiile de creare a copiilor de rezervli ~i restaurare in sistemul SQL Server intervin in contextul
modelului de recuperare a bazei de date. Modelele de recuperare sunt concepute pentru a controla
mentenanta jumalului de tranzactii. Un model de recuperare este o proprietate a bazei de date care
controleazli modul in care tranzactiile sunt jurnalizate, specificli dacli jumalul de tranzactii necesitli (~i
autorizeazli) crearea copiilor de rezervli ~i precizeazli tipurile de operatii de restaurare disponibile.
Existli trei modele de recuperare: simplli, completli ~i masivli, folosind jurnalul de tranzactii (Bulk
logged). in general, o bazli de date utilizeazli modelul de recuperare complet sau in modelul de recuperare
simplu. Este posibil sli se modifice modelul de recuperare a unei haze de date in orice moment.
Modelul de recuperare simpla
Nu utilizeazli nici un jurnal al copiilor de rezervli. Recuperarea datelor este posibilli numai din cea
mai recentli copie de rezervli a bazei de date. Nu este posibilli recuperarea la o anumitli data ~i orli
Modelul de recuperare completa
Pentru restabilirea datelor necesitli executarea periodicli a procesului de creare a copiilor de rezervli
(backup process), folosind jurnalul de tranzactii ~i a backup-ului complet al bazei de date. in functie
de tipul de clidere a sistemului, baza de date poate fi recuperatli, fie in punctul ultimului backup
complet, fie in punctul ultimului backup, folosind jurnalul de tranzactii. in cazul in care jurnalul de
tranzactii este incli disponibil, pot fi recuperate datele celor mai recente tranzactii validate. Modelul
de recuperare completli face posibilli restabilirea bazei de date la o anumitli data ~i orli.
Recuperarea hazel de date

Modelul de recuperare masiva, folosind jurnalul de tranzactii


Modelul de recuperare bulk logged reprezinta un mod special de recuperare, care minimizeaza
activitatea jurnalului de tranzactii in timpului operatiilor bulk. Nu este posibila recuperarea la o
anumita data ~i ora.
Modelul de recuperare poate fi modificat in cadrul instructiunii ALTER DATABASE sau in fereastra
Database Properties din consola de management a SQL Server.

11.1.2. Backupuri complete ale bazei de baze


0 copie de rezerva poate avea ca scop o baza de date intreaga, o parte a bazei de date sau un set de
fWere sau de grupuri de fi~iere. Pentru fiecare din aceste optiuni, SQL Server sustine backupuri complete
~i diferentiale.

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.

11. 1.3. Backupuri diferenJiale


Un backup diferential (Differential backup) se bazeaza pe cea mai recenta copie de rezerva
completa a datelor. Acest lucru este cunoscut sub numele de baza diferenfiala sau baza de diferenfe. Un
backup diferential contine doar datele care au fost schimbate dupa crearea backupului precedent. De
obicei, backupul diferential se creeaza mai repede decat un backup complet. Prin urmare, folosind
backupul diferential pot fi accelerate procesele de creare a backupurilor frecvente, cu scopul de a reduce
riscul de pierdere a datelor. De obicei, baza diferentiala este utilizata de mai multe backupuri succesive
diferentiale. in timpul restabilirii datelor, in primul rand, este restabilit backupul complet, urmat de eel mai
recent backup diferential.
Pe parcursul cand baza de date este actualizata, volumul de date care sunt incluse In backupurile
diferentiale cre~te. Acest fapt face ca procedura de creare ~i recuperare sa decurga mai lent. in cele din
urma, un alt backup complet va trebui sa fie creat pentru a oferi o noua baza completa pentru alte serii de
backupuri diferentiale.
Fiecare copie de rezerva a datelor include o parte din jurnalul de tranzactii, astfel incat sa fie
posibila recuperarea datelor pana la momentul crearii acestei copii.

11.1.4. Backupuri ale bazei de date


Backupul bazei de date (Database backup) este u~or de aplicat ~i este recomandat sa fie creat in
mod regulat. SQL Server suporta urmatoarele tipuri de backupuri ale bazei de date:
Full Database backup
0 copie de rezerva a intregii haze de date, care reprezinta toata baza de date la momentul in care
procesul de creare a backupului s-a terminat.
Differential database backups
0 copie de rezerva a tuturor fi~ierelor din baza de date. Acest backup contine numai acele extenduri
de date care au fost modificate din momentul ultimei copii a fiecarui fi~ier.
Recuperarea bazei de date

11.1.5. Backupuri parJiale


mizeaza
ea la o Backupurile paqiale ~i paqiale diferentiale au fost introduse, pentru prima data, in SQL Server
2005. Aceste backupuri sunt concepute pentru a asigura o flexibilitate mai mare sub un model simplu de
recuperare pentru sustinerea bazelor de date care contin unele grupuri de fWere de tip read-only. Cu toate
ereastra acestea, acest tip de backup este suportat de toate modelele de recuperare.
SQL Server 2017 sustine urmatoarele tipuri de backupuri paqiale ale fWerelor:
Backup partial
0 copie de rezerva a tuturor datelor din grupul de fi~iere primare, din orice grup de fi~iere de
m set de citire/scriere, precum ~i din orice fi~ier sau grup de fi~iere read-only specificate optional. Un backup
omplete partial al unei bazei de date read-only contine numai grupul de fi~iere primare.
Backup partial diferential
de date, 0 copie de rezerva, care contine doar extenduri de date, ce au fost modificate incepand cu eel mai
va sunt, recent backup partial al acelui~i set de grupuri de fi~iere.
bazei de

11.1.6. Backupuri de fi§iere


intr-o baza de date, fi~ierele pot fi supuse unui proces de creare a copiilor ~i restabilire individual.
Folosind backupul de fi#ere, poate fi marita viteza de recuperare, restabilind numai fi~ierele deteriorate,
: rezerva tara restabilirea restului bazei de date. De exemplu, in cazul in care o baza de date este formata numai din
·en/e. Un cateva fi~iere care sunt amplasate pe diferite discuri ~i un disc s-a deteriorat, doar fi~ierul de pe discul
dent. De deteriorat se cere, de fapt, sa fie recuperat. Cu toate acestea, planificarea ~i restaurarea backupului de
folosind fi~iere poate fi complexa ~i, de aceea, backupul de fi#ere trebuie sa fie utilizat doar in cazul in care el este
a reduce univoc necesar in planul de restabilire.
:uccesive
e eel mai SQL Server admite urmatoarele tipuri de backup de fi~iere:
Backup de fil!jliere
~kupurile 0 copie de rezerva completa a tuturor datelor unui sau mai multor fi~iere, sau grupuri de fi~iere.
cele din in cadrul unui model de recuperare simpla, backupul de fi~iere poate fi facut asupra grupurilor de
;l serii de fi~iere secundare read-only, dar ~i asupra fi~ierelor de citire/scriere. in afara de aceasta, fi~ierele de
citire/scriere trebuie copiate toate impreuna. Acest lucru va asigura ca baza de date sa fie repusa
:at sa fie lntr-o stare consistenta.
Backup diferentj:.ial de fil!jliere
0 copie de rezerva a unui sau mai multor fi~iere care contin numai extenduri care s-au modiftcat de
la eel mai recent backup complet al fiecarui fi~ier.

! 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

11.1.8. Backupuri copy-only


Backupul copy-only (Copy-only backup) reprezinta o copie de rezerva independenta de
mecanismele de creare a copiei de rezerva ~i de secventa de backupuri conventionale din sistemul SQL
Server. In mod normal, o copie de rezerva modifica baza de date ~i afecteaza restaurarea copiilor
ulterioare. Uneori, este util sa se faca o copie pentru un anumit scop, flira a afecta procedurile globale de
creare a copiei de rezerva ~i restaurare a bazei de date. Pentru aceasta, se poate folosi o copie de rezerva
copy-only.
Tipurile de backupuri copy-only sunt dupa cum urmeaza:
Copy-only full backups
Toate modelele de recuperare. Copia de rezerva copy-only nu poate servi nici baza diferentialli, nici
In calitate de backup diferential ~i nu are nici un efect asupra bazei diferentiale. Restaurarea unei
copii de rezerva copy-only este identica cu restabilirea oriclirui altui backup complet.
Copy-only log backups
Numai nwdelele de recuperare completii ~i masivii, folosind jurnalul de tranzac/iL Copia de
rezerva copy-only log pastreaza punctul de arhiva al jurnalului existent ~i, prin urrnare, nu afecteaza
ordinea de backupuri log regulare. Backupurile log de tipul copy-only sunt de obicei inutile. Cu
toate acestea, exista posibilitatea sa se creeze o rutina noua de log backup (folosind WITH
NORECOVERY) ~i sa fie folosita aceasta copie de rezerva cu orice alte copii anterioare necesare
pentru a restabili ordinea. Cu toate acestea, Backupul copy-only log poate fi uneori util doar pentru a
efectua o restaurare on-line.

11.2. Restricfii asupra operafiilor de recuperare


SQL Server permite crearea copiilor de rezerva in timpul utilizarii bazei de date. Cu toate acestea,
exista unele restrictii.

11.2.1. Nu pot fi create copii ale date/or deconectate (off/ine)


Orice operatie de creare a copiilor de rezerva, care implicit sau explicit, se refera la date
deconectate, va e~ua. Unele exemple tipice sunt prezentate in continuare:
• Fie ca se dore~te o copie de rezerva completa a bazei de date, dar un grup de fi~iere din baza de
date este deconectat. Deoarece intr-un backup complet sunt incluse implicit toate grupurile de
fi~iere ale bazei de date, realizarea acestei sarcini este imposibila.
In acest caz, poate fi solicitat un backup de fi~iere pentru care sa fie specificate doar fi~ierele ce
sunt In regim on line.
• In cazul in care se cere un backup partial, dar grupul de fi~iere de citire/scriere este deconectat,
crearea copiei de rezerva va fi, de asemenea, imposibila, deoarece pentru un backup partial sunt
necesare toate grupurile de fi~iere citire/scriere.
• Fie ca se cere un backup de fi~iere specificate, dar unul din fi~iere nu este in regim operativ
(online ). Operatia de creare a copiei de rezerva nu va reu~i. Pentru a efectua un backup al
fi~ierelor, mai intfil din lista de fi~iere trebuie ~terse fi~ierele o.ffiine ~i apoi realizata operatia.

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.

11.2.2. Restricfii asupra accesului concurenfia/ in timpul crearii copiei de rezerva


SQL Server utilizeaza un backup online, pentru a admite crearea backupului bazei de date in timp
ce baza de date este folosita. Astfel, in timpul backupului, majoritatea operatiilor raman posibile. De
exemplu, instructiunile INSERT, UPDATE sau DELETE sunt acceptate in timpul operatiei de creare a
copiilor de rezerva. Cu toate acestea, daca se incearca lansarea unui backup in timp ce se creeaza sau se
Recuperarea bazei de date

~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

11.3. 1. Dispozitive backup

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

'ff View connection oroperties

Pr~

Ready

OK Cancel

5. in campul de editare Device Name, se introduce numele dispozitivului backup care va fi


utilizat de instructiunea de creare a copiei de rezerva. in cazul nostru, se alege numele
deviceOl.
6. Se aplica activitati in grupul Destinations:
in campul Tape se alege dintr-o lista un dispozitiv de destinatie de tipul Tape (banda
magnetica). Aceasta optiune este disponibila numai daca biblioteca de benzi magnetice este
a~ata la calculatorul unde ruleaza motorul bazelor de date Microsoft SQL Server.
in campul de editare File, se indica locul fizic al fi~ierului pentru un dispozitiv de backup
existent, sau se specifica fi~ierul-destinatie pentru un dispozitiv backup logic nou.
Pentru un dispozitiv de backup existent, sistemul afi~eaza calea catre fi~ierul backup. Campul
File nu este editabil, iar butonul Browse nu este disponibil.
Calea catre dispozitivul de tip File este citita, implicit, din setarile serverului SQL in cauza ~i
anume din setarile Database default locations, optiunea Backup.
Pentru un nou dispozitiv backup logic, trebuie specificata calea fi~ierului backup pentru care
este definit acest dispozitiv. Acest fi~ier nu neaparat trebuie deja sa existe.
Pentru a specifica un fi~ier backup local, poate fi utilizat butonul Browse ce se afla in partea
dreapta a casutei de insertie File. Prin intermediul casetei de dialog Locate Database Files, se
navigheaza prin spatiul accesibil de fi~iere. Daca fi~ierul de backup inca nu exista, numele Jui
poate fi specificat In campul File name al acestei casete de dialog.
Campul File poate fi editat ~i in mod manual, suprascriind calea implicita, numele fi~ierului ~i
extensia.
Dupa crearea dispozitivului, acesta se va gasi in Object Explorer, grupul Backup Defices.
Recuperarea bazei de date

11.3.2. Realizarea unui backup comp/et al bazei de date


Pentru realizarea unui backup complet al bazei de date, se parcurg urmatorii p~i:
1. in SQL Server Management Studio, se selecteazli baza de date pentru care se va realiza un
backup.
2. Se face un click cu butonul drept al mouse-ului pe baza de date ~i, in meniul de context, ce s-a
deschis, se aplica un click pe optiunea Tasks, apoi se trece ~i se actioneazli optiunea Back
Up...
in acest punct, se va deschide fereastra Back Up Database propriu-zisa:
Back Up Database - universitatea
1 Select a page
!J Script ~ Cl Help
I- General
J- Media Options
J- Backup Options Source
Database : universitatea

Recovel)' model: F' ..l.L

Bae!$_up type : Full

0 Cop~-only backup

Backup component :

o.! I Data\lase

0 Ries and lilegroups :

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

ylf View connection properties

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:

Backup Device - device01


Select a page [T Script ... Help
J.t General
J.t Media Contents
Device o.ame :

Destination

• F:\ DBBACKUP\ device0 1.bak

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.

Media family count


Afi~eaza numarul de familii intr-un set de suporturi de date. Fiecare set de suporturi de date
este o colectie de una sau mai multe familii de suporturi de date. Toate datele de ie~ire la un
anumit dispozitiv backup (sau grup de dispozitive backup oglinda) formeaza o singura
e in familie de suporturi de date.
kpe
Recuperllrea bazei de date

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.

11.3.4. Crearea backupului in Transact-SQL Query Editor


Construirea unei copii de rezerva poate fi executata ~i in mediul Transact-SQL Query Editor. Mai
jos, sunt prezentate cateva variante de realizare a unei copii de rezerva a bazei de date universitatea.
Pentru crearea unui backup, mai intai, se recomanda sa se defineasca un dispozitiv backup cu
proprietati dezirabile. Pentru definirea dispozitivului backup in Transact-SQL Query Editor, poate fi
utilizata procedura stocata de sistem sp_addumpdevice care are urmatoarea sintaxa de utilizare:

sp_addumpdevice [ @devtype = ] 'tip_dispozitiv'


, [ @logicalname = ] 'nume_logic'
, [ @physicalname = ] 'nume_fizic'
[ { [ @cntrltype = ] tip_controller I
[ @devstatus ] 'statut_dispozitiv'}

In exemplul ce urmeaza, prima instructiune creeaza dispozitivul backup nou. In calitate de


parametri de intrare este definit tipul dispozitivului - DISK, numele logic al dispozitivului - device02 ~i
numele fizic al dispozitivului, specificand in acel~i timp ~i cale spre acesta.
Instructiunea BACKUP ce urmeaza creeaza un backup complet al bazei de date universitatea in
dispozitivul de backup creat anterior. Clauza FORMAT se utilizeaza atunci cand, prima data, se face copia
de rezerva sau cand se dore~te sa se rescrie o copie de rezerva. Clauza NAME specifica numele setului de
backupuri.

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:

RESTORE FILELISTONLY FROM device01;


kup cu
oate fi Aceasta instructiune afi~eaza din tabelul backupfile al bazei de date msdb informatii despre lista
fi~ierelor ~ijurnalul
de tranzactii de pe dispozitivul backup deviceOl.

11.4. Restaurarea backupului


Procesul de restaurare este foarte asemanator procesului de copiere.

11.4.1. Recuperarea date/or in mediul SQL Server Management Studio


Pentru recuperarea datelor in mediul SQL Server Management Studio trebuie des~urate
unnatoarele activitati:
:ate de
I. Se face un click cu butonul drept al mouse-ului asupra bazei de date, care va suporta
ce02 ~i restaurarea unei copii ~i, in meniul de context, care se va deschide, se vor selecta optiunea
Tasks ~i apoi optiunea Restore, apoi Database ... sau Files and Filegroups ... , in functie de
ritea in tipul ales de restaurare
~ copia in acest punct, va fi deschisa urmatoarea fereastra:
ului de
Restore Database - universitatea - Cl . .


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

I~: Qatabase: universitatea

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~

Log Transaciion Log MV universitatea 2 ! 11JDOOG03(


zei de
log TIOflsaction log MV universil.atea 3 ~ 1o<'.Al0003~
te din View connection properties

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.

11.4.2. Recuperarea date/or, folosind instrucfiuni Transact-SQL


Pentru restaurarea bazelor de date, folosind limbajul Transact-SQL, se utilizeaza instructiunea
RESTORE DATABASE.
in continuare, se vor analiza cateva exemple de utilizare a acestei instructiuni.
Exemplul de mai jos realizeaza restaurarea bazei de date universitatea din dispozitivul logic
deviceOJ:

. 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.

curent al bazei intrebari de control:


este nevoie de
bleme in acest 1. Modele de recuperare in SQL Server 2017.
i a tranzactiilor 2. Ce sunt backupurile ~ice tipuri de backupuri sustine SGBD-ul SQL Server 2017?
3. Care sunt regulile ~i constrangerile de realizare a backupurilor?
Recuper{lrea bazei de date

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.

12. SERVICll DE INTEGRARE A DATELOR


Capitolul este consacrat in intregime utilizarii serviciilor de integrare a datelor (SQL Server
Integration Services). Sunt examinate utilitatea acestor servicii, metodele de transformare ~i de export-
import al datelor, ~i gestiunea pachetelor acestor servicii in mediul SQL Server Management Studio
[1,3,5].

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.

12.1. Componentele fi funcfionalitafile SSIS


Integration Services include instrumente grafice ~i asistenti pentru construirea, depanarea ~i gestiunea
pachetelor de integrare ~i transformare a datelor. Cu ajutorul Integration Services, se pot rezolva probleme
complexe de business prin copierea sau descarcarea fi~ierelor, trimiterea mesajelor e-mail ca raspuns la
evenimente, actualizarea magaziilor de date, curatarea (data-cleaning) ~i extragerea datelor (data-mining),
gestionarea obiectelor ~i datelor in SQL Server.
Prin SSIS, datele unei baze de date SQL Server pot fi transformate in date compatibile reprezentate
'in diverse alte formate. Aceste servicii constituie o piesa fundamentala in procesul de colectare ~i
transformare a datelor.
Procesul de transformare permite importarea ~i exportarea datelor, convertirea datelor intre
aplicatiile care utilizeaza diverse formate ale datelor, astfel, meat aplicatia locala sau extema are
posibilitatea sa lucreze cu datele celeilalte. Conversia presupune transformarea datelor, adica construirea
unei secvente de operatii ce pot fi executate asupra unei surse de date, inainte ca ele sa fie scrise in punctul
de destinatie.
Arhitectura unui pachet SSIS este, in realitate, o descriere detaliata a operatiilor care trebuie
executate pentru ca o unitate de date sa fie importata, exportata sau transformata.
Serviciile SSIS se pot conecta la o varietate larga de date-sursa care imbina multiple surse intr-un
pachet. Un pachet se poate conecta la bazele de date relationale, folosind tehnologiile .NET ~i OLE DB, ~i
la bazele de date eterogene (din punctul de vedere al modelului de date), folosind o varietate de drivere. Se
poate conecta ~i la fi~ierele plate, fi~ierele Excel, precum ~i la proiectele Analysis Service.
Un pachet SSIS poate fi creat in doua moduri:
SQL Server Data Tools
Aplicand SQL Server Data Tools, care in functie de configuratia de instalare poate contine modulul
Integration Services Project - un instrument grafic destinat utilizatorilor mai experimentati ~i folosit
pentru consolidarea, transformarea ~i integrarea datelor eterogene receptionate din diverse surse.
Asistentul SQL Server de import-export
Prin intermediul asistentului, datele pot fi importate, exportate ~i transformate dintr-o serie de surse
de date, ca, de exemplu: ODBC Data Sources, SQL Server Databases, tabelele electronice Excel,
~ierele Access, fi~ierele plain text ~i altele.
Servicii de integrare a date/or

12.2. lnstalare SQL Server Data Tools


SQL Server Data Tools (SSDT) reprezinta o extensie a mediului Visual Studio , care contine
~abloanele ~i componentele necesare pentru dezvoltarea solutiilor BI. incepand cu versiunea SQL Server
2014, Data Tools nu se mai instaleaza impreuna cu serviciile SQL Server ~i, prin urmare, instrumentul
Data Tools trebuie instalat separat.
Kit-ul de instalare pentru SQL Server 2017 poate fl descarcat pe adresa:
https://docs.microsoft.com/en-us/sgl/ssdt/download-sgl-server-data-tools-ssdt. Acest URL poate fl accesat
~i din SQL Server Installation Center selectand optiunea Install SQL Server Data Tools. Pentru a instala
SSDT, se parcurg p~ii de maijos:

SQL Server Installation Center - - - r:i'W!ll'


Plannin g r~ r..ie-,,.. t;QL Ser.'er s.t.mJ-abnt: 1mtall.!1loon or add fttawres to an e:>:1$ting instit!l;!tl¢r.
·-·~ launch a wii.ard to install SQL 5.erv~ 2017 ma non~clustered envuonmenl ortc add
features to an ext~1 n g SQL Seiver 201? instance-.
Maintenance
Inst.an SQL Server Reportinq Servicei
Tools
Launch a download page thi!t provides a link to install SQL Server Reporting Services.
Resources An internet connection is required to install SSRS.

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.

1. Pentru a porni instalarea se executa un dublu-click pe fl~ierul descarcat. Ca urmare, se lanseaza


asistentul de instalare.
2. Primul pas al asistentului va ft pagina License Terms. Pentru a instala Data Tools, este necesar
sa se accepte conditiile de licenta prin apasarea butonului Next, pentru a continua instalarea sau
Close pentru a lntrerupe instalarea.
Servicii de integrare a datelor

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.

12.3. Gestiunea date/or, ap/icand SSIS Package Designer

12.3.1. Crearea pachetelor SSIS


Utilizand SSIS Designer, se va crea un Proiect SSIS ~i un pachet in cadrul acestui proiect. Pachetul
va efectua exportarea unui tabel din baza de date universitatea, intr-o baza de date numita transf
Mai 'intai, trebuie creata baza de date trans/ cu proprietati implicite. Dupa crearea acesteia, se
parcurg urmatorii p~i:
1. Se lanseaza Start Screen -> Apps. -> Visual Studio 2017 (SSDT). in fereastra Visual Studio
Start Page, in compartimentul New Project, se alege optiunea Create new project...
2. in fereastra aparuta, se selecteaza optiunea Integration service project, In campul de editare
Name: se specifica numele proiectului, iar in campul Location: - locatia fizica a fi~ierelor.
Servicii de integrare a date/or

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.

Integrat ion Services


Reporting Services
ITT Report Serm Project Business Intelligence

t· Other Project Types


~ Analysis Services Tabular Project Business Intelligence

!> Online

Not finding what you are looking for?


Open\ i~ui:d St•Jd10 lrntail!!:r

Iintegration Services Project1


Loc ation: !!rowse ...
Soluti on name: Integration Services Project1 0 Create .Qi rectory for5o lutio n

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.

utea Add SSIS Connection Manager


:oare
Select the type of connection manager to add to the package.
L1 de ~onnection manager type:

Type Description File Na ... File 1<>

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

8dd ... Cancel


or 1n
earea

Se face un click pe sursa de tip OLE.DB ~i se apasa butonul Add ...


s la 5. Apare fereastra Configure OLE DB Connection Manager, unde, pentru a crea o noua
rre a conexiune, se apasa butonul New .... Se deschide cutia de dialog Connection manager.
Servicii de integrare a date/or

Configure OLE DB Connection Manager - D

Connection Manager al
Provider. INat iv• OLE DB\SQL Seiver Native Cl ient 11 .0 iJ
Q ' Server name:

-'·~·
~---·"'
Conn ection
Ml/

Log on to the server


" Refresh

Authenticatio n: Windows.Auth enticat io n

Connect to a database

' ~) Sel ect or enter a dat aba:s.e nam e:


.~
:J Attach a database fil e:

Test Co nnecti on OK Cancel Help

6. in campul de editare Server name: se insereaza numele serverului, la care se dore~te


conectarea. in domeniul Log on to server, se alege sistemul de parola sau de autentificare
Windows, sau forma de autentificare a sistemului SQL Server. in cazul in care se alege ultima
optiune, se insereaza numele utilizatorului ~i parola acestuia.
in domeniul Connect to a database, se alege numele bazei de date sau se a~eaza tWerul
bazei de date. Dupa setarile necesare, se apasa butonul Test Connection. in cazul cand
conexiunea este testata cu succes, se apasa OK.
7. Acum, In arborele proiectului, se poate observa un nou Connection Manager.

Solution Explorer "' fl. x


A "' '
lIJ Cl~ " I

~ Solution 'Integration S.ervices Project1 ' (1 project)


... .~ Integration Services Project1
~ Project.param ~
... ill Connecti on Manag ers

... ill ac ·ages


l?i. Package,dtsx
... ill Package Parts
ill Control Flow
ill Mi scellaneous

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:

~ Integration Services Project1 - Microsoft Visual Studio


file fdit Yiew P.roject ~uild .Q_ebug Team Fg_rmat _2SIS
Develop1 ~ Default
1

SS!S Toolbox • ~ X Package.dtsx [Design]* -ti X


• Favorites ~-0 Control Flow

•Common
Data Flow Task: ili Dat a Flow Ta=

• Other Tra ns ·orms

.; 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

Olf DB Source Edit.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

OLE DB i;onnection manager:

tJ.ew ...

Data _qcc.e;s mode;

Table or view

Name of the table or the view:

I Select a connection manager from the list of connection managers.

Cancel !::!elp

Se actioneaza triunghiul din partea dreapta a campului OLE DB connection manager ~i in


lista derulanta aparuta se alege conexiunea creata anterior, care se nume~te universitatea ~i
se apasa OK.
11. in fereastra OLE DB Sourse Editor, In campul Name of the table or the view, se selecteaza
tabelul discipline, apoi se apasa butonul OK.
12. Se redenume~te obiectul din aria de lucru (Data flow) In Flow_universitatea.

Package.dtsx [Design]

~.a Control Flo•N

{:>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

;1' Derived Column


'9. hDFS fil e Destination
Servicii de integrare a datelor

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

15'+- DataReader Destinatio n


_ew... k: Dimension Processing
lJi. Excel Destin ation
!?'+- Flat File Destination i+- Aow_transf 0
<ft'': ODBC Destination

c2J Partition Processing


1§1._ Raw· File Destination
~ Recordset Destination
ii~ SQL Server Compact Desti...
~ SQL Server Destir ation

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

I ~ Data Mining ·,focie l -:-raini ng :


arr ¥+- DataReader Destinatio n i~ Flow_transf 0
t ,,•
LL.. Dimens ion P ocess ing

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

SQL Destination Editor D

Configure the propertie;; used to bulk copy data into a local instance of the Database Engine.

Con nection Manager


i Mappings Specify a connection manager, data source, or data source view, and select the table or the view into which
the data is copied. Click New to create a new table or view.
Advanced

Connection manager:

I MV transf New...

New ...

Select a table o r view from the list.

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.

CREATE TABLE di5ci line tramf


[ld_Disciplina 1n
Create Table
Cl -
[Di5ciplina] varchar(255),
[Nr_ore_pl.a. n_di scip lina] sma llint
ll

OK Cancel
Servicii de integrare a date/or

17. Este important ca cfunpurile-sursa sa fie mapate corect in campurile-destinatie - pagina


Mapping. Daca toate setarile sunt corecte, se apasa butonul OK.
18. in calitate de ultim pas in crearea unui pachet SSIS, se apasa butonul drept asupra proiectului
ill Solution Explorer ~i, in meniul de context aparut, se alege Build. Daca generarea
pachetului s-a des~urat cu succes, in partea inferioara a mediului de lucru Visual Studio, va
aparea o fereastra Output cu un mesaj informativ despre compilarea reu~ita a pachetului nou.

12.3.2. Executarea fi Depanarea pachetelor SSIS


Dupa ce pachetul a fost construit cu succes inainte de a-1 plasa in mediul de productie, el poate fi
testat nemijlocit din mediul de dezvoltare Visual Studio. Astfel, pot fi detectate ~i depanate eventuale erori
aparute in procesul de executare a pachetului.
Pentru a lansa pachetul nou-creat, de pe hara de instrumente se face un click pe butonul Start
~ Start •

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.

Data Flow Task: iii Data Flow Task

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,

•ata Flow Task: i 4i Data Flow Task

ii1-+ii1 Dato Flow Task


ii+ Flow_universitatea

Iii+-
l
Fl ow_transf
0

in ftla Progress, sistemul genereaza un output detaliat al procesului de executare a pachetelor de


integrare. Analizand aceste mesaje, dezvoltatorul poate u~or depana probleme aparute.

~'° 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.

Varn analiza 2 mesaje de eroare din fila Progress:


An OLE DB record is available. Source: "Microsoft SQL Server Native Client 11 .0" Hresult:
Ox80004005 Description: "Login failed for user 'MV\marian'.".
An OLE DB record is available. Source: "Microsoft SQL Server Native Client 11.0" Hresult:
Ox80004005 Description: "Cannot open database "transf'' requested by the login. The login failed.".
Aceste mesaje sugereaza ca sistemul nu reu~e~te sa se conecteze la baza de date transfer utiliziind
con:figuratia de conexiune existenta. in ~a caz, dezvoltatorul trebuie sa ia in considerare cateva lucruri:
1. Daca este configurat corect Connection Manager utilizat;
2. Daca loginul utilizat are nume ~i/sau parola valida pentru conexiune la aceasta baza de date;
3. Daca nu exista problema de comunicare/retea intre pachetul SSIS ~i baza de date;
4. Daca baza de date este online ~i raspunde la interogari.

12.4. Exportarea date/or cu ajutorul asistentului


Deseori, se intampla ~a ca este nevoie sa se efectueze un proces de import sau export de o singurii
data f'ara a consacra mult timp pentru dezvoltarea, depanarea ~i asigurare continuitatii de dezvoltare.
in continuare, se va examina cum se exporta datele sistemului SQL Server (in cazul altui tip de
fi~iere),utilizand asistentul de exportare. Procesul este foarte simplu:
1. La lnceput, se extinde serverul respectiv, se extinde dosarul Databases, se face un click cu
butonul drept al mouse-ului pe baza de date - sursa de date destinata pentru export.
in cazul nostru, iar~i se alege baza de date universitatea.
2. in meniul de context, care a aparut, se aplica un click pe optiunea, Tasks, apoi pe Export
Data..
Servicii de integrare a datelor

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.

SQL Server Import and Export Wizard


Choose a Dom Source
Sele<:t the sou rce from ·,vhich to cc py data.
0

Q.ata source:

~rl/er name: MV ...


or de Authentication
[. Use Y{indows Authentic <>tion

r Use S.Q_L Serv er .~uthentication

Database: -=] -· __B._e_fr_es_h_..........,

Acquir

!:ielp <J;..ack 11 !:!ext > Cancel


____. . . ------' j ,d.
·es ult:

: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

SQL Server Import and Export Wizard

Choose a Destination
Spe>::ify where to copy d3ta to.

Q.estinatiorr: 1~ Microsoft Excel


, Excel connection settings

qcel file path:

jD:\temp \.exportare _sql xlsx Bra:!{se... .. I


Excel y_ersion:

' !Microsoft Excel 2016


1 P' E_irst row has column names

< §ack Jiext > Cancel I


4.

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:

SQL Server Import and Export Wizard

Specify Table Copy or Query


Specif;• whether to ccpy one or more tables amf >1iem or to copy the res ults of a query from the dilta
source.

r.· {;_opy data from one or mare tables or views


Use this option to oopy all the dilta from the existing tables er view·s in the source database.

! Write a quer/ to s pecifi/ the data to transfef


Use this option to write an SQL que.ry to rnar.ipJlate or to restrict the source data fer the copy operation.

!::!elp <§ack 11 Jiext > Cancel j


dJ
Servicii tie integrare a date/or

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:

SOL Server Import and Export Wizard ci MM


Select Source Tables and Views
Choose one or more tables and views to copy .

lables and vie\\1-s :

•.lea ~i
r Source : MV Destination : D:'-:temp \ exportare _sql .x!sx

\temp r _'.'.] [dbo] {discipline J

.iunea r _:i [dbo].[grupe)

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]

.E_dit Mappings .. . .E.reviev1 ...

.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

Destination: · profesori "

r. Create destination ta.hie Edit~L.

r r Q.rop and re-create destination table

Mappings:

Source Destination Type I Nullable Size Precision j Scale I


ld_Profesor ld_Profesor Long r
Nume_Profesor Nume_Profesor Long Text r
Prenume_Profe ... Prenume_Profe ... Long Text r
Adresa _Postala ... A.dresa_Postala ... Long Text p

Source column: l<l_Profesor int NOT NULL

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

• 0 pictograma de culoare galbena indica faptul ca este necesar sa se revizuiasca


conversiile individuate pe care le va efectua asistentul. Pentru revizuirea acestor
conversii, se selecteaza tabelul respectiv ~i apoi se revizuiesc conversiile pentru coloanele
respective in tabelul Data type mapping.
• 0 pictograma de culoare ro~ie indica faptul ca asistentul nu este capabil sa realizeze unele
din conversii ~i sa pastreze totodata consistenta datelor exportate.

SQL Server Import and Export Wizard LJMW


Review Dom Type Mopping
Select a table to re'1iew how its d ata ty pes map to those in the destination and how it handles
conv ersicn iss ues .

Table:

Source Destination
1~~-~~~~~~~~~~~~~~~~J..,.._.

1 ' {dbo l.!profesofi] :ilil 'profesori ·

< >
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.

On Error (global) j Fail


On TruOC-Otion (glob.a l) lFail

!ielp <aack 11 Next > Cance l j


_P;

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.

S.Ql Server Import and Export Wizard

Save and Run Poc:kHge


Indicate -.•;hether to save the SSI S package.

W Rg_n i mmediately

r ~ve SSIS Pac kage


r. -

Package pcie.ct1c·n le11e! :

!::!elp <~ck 11 Jiext > Einish >>I Can.eel j


0

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.

SQL Server Import and Export Wizard

The execution was successful

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

12.5.1. Crearea Integration Services Catalog


inainte de des~urarea pachetului, este nevoie de a crea Integration Services Catalog, care va servi
in calitate de container pentru toate proiectele de SSIS.
1. in SQL Server Management Studio, in Object Explorer, se expediaza serverul in cauza ~i se
face un click-drept pe dosarul Integration Services Catalog.
2. i n meniul de context aparut, se alege optiunea Create Catalog ... ~i apare fereastra Create
Catalog. Pentru configuratia de baza a catalogului, este important sa fie activat butonul
Enable CLR integration ~i sa fie definita o parola pentru catalog in cfunpul Password.

Create Catalog
(_• Ready

Select a page .!J Scrq::t lJ Help


/ti General

To create and use the catalog , CLR integration must be enabled on the current SQL Seiver instance .
[?.] ~able CLR Integration

[J Enable £utomatic execution of Integration Services stored procedure at SQ L Server startup

tiame of the catalog database:


SSISDB

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]

View connection properties

Ready

OK Cancel

L-. -~-~ ~~~~~~~~~~~~~~~~~~~~~~~~·----~~~~_.


3. Se apasa OK.
in consecinta, in dosarul Integration Services Catalog, apare un container numit SSISDB, iar
un dosarul Databases apare o baza de date noua cu acel~i nume.

12.5.2. Desfafurarea pachetelor in Integration Services Catalog


in calitate de exemplu, va fi analizat proiectul SSIS creat in sectiunea 12.3 a acestei lucrari.
Pentru a desr~ura un proiect de integrare in Integration Services Catalog se parcurg urmatorii p~c
1. in medul de dezvoltare Microsoft Visual Studio, se deschide proiectul SSIS creat anterior.
2. in hara de meniuri, se alege Project, in lista de optiuni aparuta, se alege Deploy. ~
consecinta, apare pagina de bun venit Introduction a asistentului de desf'~urare -
Integration Service Deployment Wizard, unde se apasa butonul Next.
3. in fereastra Select Source, se seteaza urmatoarele optiuni:
Servicii tie integrare tl date/or

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

Select the deployment model : Project Deployment


Seiect Destination

-dto protect Vahdate Select the Integration Services project that yuu want ta deploy.

(~; Project deployment file


Resulls
2· Integration Services c atalog

Path :
m Services
I content . D:WS_201?\ Integration Servic es Project l \ lntegration Services Project· !irowse ...

{ f revious Next > Cance[

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

B Integration Services Deployment Wizard

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[

5. Urmeaza pagina de validare - Validate. Aceasta pagina prezinta importanta functionala in


cazul in care des~urarea se face in SQL Server Azure. Aici, se apasa Next.
6. in pagina Review, pot fi revazute specificatiile des~urarii proiectului. Se apasa Deploy.
7. Fereastra Results afi~eaza totalurile des:ta~urarii proiectului. Apasand butonul Save Report,
se poate pastra raportul detaliat sub forma fi~ierului XML. Aici, se apasa Close.

12.5.3. Executarea unui pachet din SSISDB


Pentru executarea unui pachet SSIS din Intergation Services Catalog, se parcurg urmatorii p~i:
1. in SQL Server Management Studio, 1n Object Explorer, se expediaza serverul in cauza.
2. Se expediaza dosarul Intergation Services Catalog ~i dosarul de proiect, unde se afla
pachetul necesar, In cazul nostru Univer_transf_export, apoi, dosarul Projects ~i, la urma,
dosarul Packages.
3. Se face un click-drept pe pachetul necesar ~i, din meniul de context aparut, se alege
Execute ...
Servicii <le integrare ll <llltelor

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:,

- jg MV (SQL Server 14.0.1 000.1 69> - M\l\marian) MV (SQL


(+• Databases
Name
Security
[+' Server Object~
f Replication
1£; PolyBase
r:E Always On High Availabiliti;
·t< Management
[::J Integration Services Catalogs
e Ll SSISDB
8 Univer_tramf_export
b Projects.

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

IJ Execute Package - Package.dtsx(lntegration ServicesPro_iectt) - Cl

l 'tJ Ready
Select a page (T Script • !) Help
I /II General
Parameters Connection Managers !· Advanced

Name f:roperties

Property name Value


Data Source=MV;lntt1al Catalog=,, ,,.
1 lnttialCatalog transf
, Password
RetainSameConnection False

Comection
.•·ServerNam
UserName
e MV
NULL
, Yl MV jMV\marianJ

\'Jew connection properties

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

Integration Services Catalogs


2 C~ SSISDB

'?
,!,'. ..,.....
.......

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

Start time range : 2/ 22/2{}18 - 2128/201 8 ; Status : .AJI ; {4 more}

Ex8c11;:c r, lnlcrrna!i :•r


de
0 0 2 0
m Failed Running Others
or
ID .. Status Report Folder Name ~ Project P.
m
ul
~e I 5 Succeeded Overview .All Messages Execution
Performance
Urnver_transf _export Integration Se
Project1

I 4 Succeeded Overview .All Messages Execution


Performance
Univer_transf _export Integration Se
Project1

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

13. SERVICll DE CREARE A RAPOARTELOR


Capitolul trateaza stadiul actual al serviciilor de creare ~i gestiune a rapoartelor 1n mediul Visual
Studio 2017 (SSDT). Sunt examinate aspectele referitoare la instalarea ~i configurarea serviciului SSRS,
afi~area datelor 1n forma unor pagini hipertext, precum ~i gestiunea proprietatilor serviciilor de rapoarte.

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.

13.1. lnstalarea serviciului SSRS


in versiunea SQL Server 2017, serviciul SSRS se instaleaza separat de motorul SQL. Pentru a
instala serviciul de rapoarte, este nevoie de parcurgerea a unei serii de p~i simpli [28]:
1. Se deschide SQL Server Installation Center ~i, 1n partea stanga a ferestrei, se selecteaza meniul
Installation, apoi, 1n partea dreapta, se face click pe optiunea Install SQL Server Reporting
Services.

SQL Server Installation Center

~
.,,...,.._ 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

2. in consecinta, se va deschide urmatorul URL https://www.microsoft.com/en-


us/download/details.aspx?id=55252, de unde se descarca chitul de instalare.
3. Dupli ce fi~ierul de instalare este descarcat, se face dublu-click pe el ~i apare pagina de bun
venit a asistentului de instalare SSRS - Welcome. Aici, se aplica un click pe singurul buton-
bara - Install Reporting Services.
Servicii de creare a mpoartelor

4. Urmatoare fereastra a asistentului de instalare este Choose an edition to install Se activeaza


radio-butoanele respective pentru a indica varianta gratuita sau cu platii a sistemului SSRS.
Ciimpul Choose afree edition: reprezintii un check-box, unde se poate alege o versiune gratuita
a sistemului. Existii cele 3 variante disponibile de versiune gratuita a produsului: Evaluation,
Developer sau Express. in cazul in care se alege varianta cu platii (se activeaza butonul Enter
the product key), pentru a continua instalarea, este necesara inserarea numiirului de identificare
a produsului (PID) ~i, apoi, se apasa butonul Next.
5. in continuare, se deschide pagina Review the license terms. Pentru a instala SSRS 2017, este
necesar sa se accepte conditiile de licenta prezentate in fereastra. Se activeazii radio-butonul I
accept the licence terms, apoi se apasa Next, pentru a continua instalarea sau Cancel, pentru a
intrerupe instalarea.
6. Urmatoare pagina a asistentului - Install Database Engine, informeaza ca inainte de a instala
serviciul de rapoarte, este nevoie sa fie instalat un motor SQL pe serverul in cauza. Daca
motorul SQL, deja, exista pe m~ina data, se apasa Next, pentru a continua instalarea.
7. Pasul Specify an install location, aici, In ciimpul Install location, se specifica locul unde vor fi
instalate fi~ierele de sistem ale SSRS. in cazul nostru, lasiim totul implicit ~i se apasa butonul
Install pentru a pomi instalarea sau Cancel pentru a intrerupe asistentul.
8. Dupa o instalare reu~itii, apare fereastra Setup completed. Aici, se apasa butonul Configure
reporting server, pentru a trece la configurarea serviciului instalat, sau butonul Close pentru a
amiina procesul de configurare.

13.2. Configurarea serviciului SSRS


Scopul capitolului 12 constii in a face cuno~tinta cu principiile de baza de construire, des~urare ~i
utilizare a rapoartelor SSRS. Prin urmare, descrierea optiunilor ce tin de administrarea serviciului dll
rapoarte este limitatii doar la aspectele cele mai importante, orientate la lansarea serverului de rapoarte cu
un efort minimal din partea cititorului. Vor fi mentionate doar unele elemente din Reporting Services
Configuration Manager, fiira de care lansarea serviciului nu este posibila ~i vor fi utilizate, in mare parte,
setarile implicite.
Similar cu Configuration Manager pentru motorul SQL, existii un instrument grafic separat pentru
configurarea serviciul de rapoarte. El se nume~te Reporting Services Configuration Manager. Pentru a 11
accesa, se procedeazii in felul urmator: din meniul de start Windows, se tipare~te cuviintul de cautare
Reporting ~i, in lista de cautare afi~atii, se alege Reporting Services Configuration Manager. Prima apare
fereastra de conexiune Reporting Services Configuration Connection.

SOL Server 2017


Reporting Services Configuration Connection ..
Reporting Services
Ple ase sp e£ify a server name, click th e Fmd button, and select a reocrt server
instance to configu re.

~e rver Name: MY Eind

Report Serv er I nsta nce: SSRS

£on nee! CE_n cel

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.

autare Dat: base


apare
Creaenb ais Connect to the D.atabase Serv er:

~rver Na.r re:

b_uthentic ation Type: Current User - Integrated Security

!,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.

Report Server Database Configuration Wizard

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

Choose whether to c reate or configure a report ser>;er database.



Pli;as,; wait while the Repcrt Server Database Cvnf:gurauon wizard configures the
database. This might take several mlr:utes to complete.

Progri;s" om! Finish


!Veri~/ing database sko S<Y'J:eSS I
1Generating database script Suc<:ess I
!Running database script Success I
fGeneratir.g rights scripts Success i
iApplying connection rights Success !
!Setting DSN Success

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

Click Change database to select a different database or create a newdatabas_e.


, Database

SQL SerJer Name: MV


r 'lleb Portal URL Database Name:
Report Server Mode:
ReportSer1er
Natl'le
_j E-mail Settings Change Database

t Exerubon Account Current Report Server Database Credenbal


The. fo~ ! C\N<ng credentials ~re u;;ed b~' the report server to cconec: to :.tie report server database. Use the aphcn!i belaw to choose. a
different account or upda:e a :>asswc(C.
Y,, Encrvpbon Keys
Credenti al: Service Account

li~ Subscription Settings Login: NT Service\SQLServerReportingServices


Password:

' '

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.

late ~i Web Portal URL

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.

Web Portal Site Identifk.ation

: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.

13.3. Gestiunea rapoartelor cu ajutorul Visual Studio

13.3.1. Crearea rapoartelor in mediul Visual Studio


Pentru crearea unui raport, se procedeaza in urmatorul mod:
1. Se lanseazaSQL Server Data Tools/or Visual Studio 2017.
2. in consecinta, apare fereastra Visual Studio Starning Page, in care se alege optiunea New:
Project...
!lespre 3. Apare caseta de editare New Project. in partea stanga, pe panelul Installed al acestei ferestre, se
alege ramura Business Intelligence, apoi in panelul din dreapta se face un click pe ~ablonul
Report Server Progect Wizard. in campul de editare Name: se specifica numele proiectului, in
campul Location - locatia fizica a fi~ierelor ~i in campul Solution name - numele solutiei.
?--
Servicii de creare a rapoartelor

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

Not finding what you are looking for?


Open V1s:ual 5Udic !mtd!le

J:,!ame: Report Project1


1,ocation: _D:\VS)o17\ . . .§.rowse...

Solutron name: SSRS_Solution f.'1Create Qi rec.tor; for solution


OK Cane.el

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.

[:]. Report Wizard

Select the Data Source


Select a clata source from which to obtain data for this report or create a new data rnurce.

'! : NJ;w data source


N_g_me:
universitateal

Iype:
Micrornft SQL Server

E.Qit ... Credentials...

,\;;onnection .string:
Data Source= MV;lnitial Catal og = universitatea

l;;fl Make this a shared data source


- - - - ----------------------------·-------
.tielp < flack Cancel
Servicii de creare a rapoartelor

• 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

partajate Report Wizard


rrsele de Design the Query
Spec ify a query to execute to get th e data for the report .

• Use a qu ery builder t o desi gn your query.

Qi!.ery Build er...

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.

Design the Table


Choose how t o group the data in th e table.
Report Wizard -Cl -
Available field ,;: Di<played field s

P.age> Cod_Grupa

§roup> Disciplina ...:%-: :--::-::-.: ~:~.-'

Nurn eStudent Y-'. :.::.;:.; :<:.:s


+

Qetail» Tip_Evaluare

I
........... !
Help < Ba ck Next> Finish » I Cancel

9. FereastraDesign the Table include urmatoarele sectiuni:


• Available fields. Se aleg campurile ce var aparea in pagina mai sus de tabel, in calitate de
camp de grupare sau mdetaliile tabelului. Pentru a muta un camp din boxa Available In
boxa Page, Group sau Details, se selecteaza campul ~i apoi se aplica un click pe butonul
Page, Group sau Details. in mod alternativ, campul poate fi glisat in boxa respectiva.
• Displayed fields. Afi~eaza campurile, care var fi reprezentate in boxele Page, Group sau
Details.
Fereastra Design the Table include urmatoarele butoane:
• Page. Afi~eaza lista campurilor care var aparea la nivel de pagina. Pentru a schimba
ordinea campurilor, se selecteaza campul ~i se aplica un click pe butonul ~ sau butonul
~-
La nivel de paginii, se va alege campul Cod_ Grupa.
• Group. Afi~eaza lista campurilor care grupeaza datele in tabel. Pentru a schimba ordinea
campurilor, se selecteaza campul ~i se aplica un click pe butonul ~ sau butonul _!J_
Datele in raportul nostru var fi grupate dupa Disciplina ~i numele studentului.
Servicii de creare a rapoartelor

• 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.

13.3.2. Previzualizarea rapoartelor


I. in consecinta, se deschide fila Preview a constructorului de rapoarte. Pentru navigare se
utilizeaza sagetile Next Page, Last Page etc., de pe bara de instrumente.
Dupa cum se vede in exemplul nostru, s-a obtinut un raport care include datele detaliate despre
re~ita fieciirui student pentru fiecare tip de evaluare (campurile Tip Evaluare, Nota). Raportul
este grupat pe pagini dupa codul grupei, datele de pe fiecare pagina, la randul lor, sunt grupate
ierarhic dupa Disciplina ~i Nume Student. Apasand semnul ,+' in partea stanga a grupelor de
date, utilizatorul poate naviga in adancimea fieciirui grup (Drilldown).
Servicii de creare a rapoartelor

~ SSRS_SoJution - Microsoft Visual Studio


f ile f dit Y,ew !'.reject f1uild !lebug Team F.Qrmat Report Iools T~t Analyze Window !:iel
• I Debug • Defa ult • I> Start • p ..- ::

Studenti Remit a.rdl [Desig n] .., X

~ Desig n ' it.J~


of2? > i"i

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.

13.3.3. Configurarea proprietafilor de desffl!jurare


1. inainte de publicarea proiectului creat sau a unui raport separat din cadrul proiectului, este
important sa fie corect configurate proprietatile de des~urare (deploy).
Pentru configurarea proprietatilor unui proiect Report Server, in fereastra din partea dreapta,
Solution Explorer, se face un click-drept pe proiectul necesar ~i, in meniul de context aparut, se
selecteaza optiunea Properties.
in consecinta, apare fereastra de dialog <Nume de proiect> Property Pages.

£onfig uratio n:

' ~
Active(Deb ug)

Configuration Prope1t ies .. Build


Report Project 1 Property Pages

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

Sectiunea de proprietati Deployment pastreaza configuratia de des~urare a proiectului ~i ea


trebuie sa fie editata in dependenta de proprietatile tehnice ale serverului-destinatie ~i efectul
dorit.
• OverwriteDatasets indica daca definitiile seturilor de date pot fi suprascrise in timpul
desta~urarii proiectului
• in campul OverwriteDataSources se selecteaza valoarea True pentru suprascrierea sursei
de date de pe server cu sursa de date a proiectului, atunci cand rapoartele sunt publicate. Se
alege False, pentru pastrarea sursei de date existente pe server.
• TargetDatasetFolder indica calea spre dosarul disponibil setului de date.
• in campul TargetDataSourceFolder se scrie numele dosarului in care se pastreaza sursele
de date partajate publicate. Daca astfel de dosar nu este specificat, sursa de date este
publicata in acel~i directoriu ca ~i raportul. in cazul in care dosarul nu exista pe serverul de
rapoarte, Report Designer creeaza dosarul atunci cand rapoartele sunt publicate.
• TargetReportFolder indica numele dosarului in care se pastreaza rapoarte publicate. in mod
implicit, numele dosarului e reprezentat de numele proiectului. in cazul in care dosarul nu
exista pe serverul de rapoarte, Report Designer creeaza dosarul atunci cand rapoartele sunt
publicate.
• TargetReportPartFolder indica calea catre dosarul componentelor raportului.
• TargetServerURL indica adresa URL a serverului de rapoarte. Inainte de publicarea unui
raport, este important sa fie setata o adresa URL valida.
tionat in cazul in care are loc publicarea pe un server de rapoarte care ruleaza in mod nativ, se
utilizeaza URL-ul directoriului virtual al serverului de rapoarte De exemplu, http://
<server> I ReportServer. Acesta este directorul virtual al serverului de rapoarte, dar nu al
lizand · Report Web Portal (Report Manager-ului).
~erver
Atunci cand are loc publicarea pe un server de rapoarte care ruleaza in modul de integrare
SharePoint, se utilizeaza o adresa URL de eel mai inalt nivel a unui sit SharePoint sau unui
subsit. Daca situl nu este specificat, este folosit situl de nivel superior implicit. De exemplu,
http:// <numeserver>, http:// <numeServer I <sit> sau http:// <numeserver> I <sit> I
este
<subsit>.
• TargetServerVersion aceasta optiune este descrisa in cadrul procedurii de creare a
apta, raportului, folosind asistentul.
it, se
2. in cazul nostru, proprietatile se configureaza ~a cum sunt prezentate in imaginea de mai sus.
Proprietatile implicite nu au fost modificate substantial.
3. in cfunpul de editare TargetServerURL este definita calea catre serverul de rapoarte local
(http://localhost/ReportServer). TargetReportFolder este redenumit - Reusita.
4. Dupa toate setarile necesare, se apasa OK.

13.3.4. Publicarea ~; vizualizarea rapoartelor


1. Apoi in fereastra din dreapta - Solution Explorer, se alege proiectul necesar din arborele de
obiecte, se face un click-drept pe acesta ~i in meniul de context se alege Deploy.
Statutul procesului de publicare se afi~eaza in fereastra Output.
Raportul creat poate fi deschis intr-un navigator web (browser web) in orice moment. Pentru
aceasta, pe hara de adrese a browser-ului, se specifica adresa serverului de rapoarte, unde se afla
raportul creat.
2. in cazul nostru, se scrie adresa serverului local, adica http://localhost/Reports. In pagina de
radacina aparuta a portalului SSRS se observa doua dosare. Unul din dosare este numit Data
Sources ~i contine conexiunile partajate (Shared data sources). Deoarece sursa de date, pentru
raportul in cauza, era definita ca una partajata, ea era des~urata ca un obiect separat in cadrul
proiectului.
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.

··1 c. rnr• RHJS!!il Studenil Reusita

< of 2' ) I> I 0 DO~ v ~ v ~

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

Pagina WEB apiiruta este dotata cu o hara de instrumente ce permit:


• listarea paginilor raportului;
• exportarea datelor In diferite formate (de exemplu, XML, PDF, CSV etc.);
• imprimarea raportului.
3. Pentru a exporta datele, din meniul drop-down care apare dupa actionarea butonului Export
drop down meniu, se alege tipul necesar de reprezentare a raportului. Datele exportate sun!
vizualizate in mediul aplicatiilor respective, de unde pot fi u~or salvate pe un suport fizic.
.....,
Servicii de creare a rapoartelor

13.4. Editarea proprietafilor unui raport deja existent


Pentru editarea proprietatilor unui raport deja creat, se parcurge urmatoarea cale:
1. Se lanseaza Visual Studio.
2. in fereastra Start Page se alege optiunea Open: Project I Solution
3. in caseta de dialog Open Project aparuta se specifica calea spre Report Project necesara ~i se
apasa butonul OK.
4. in consecinta, apare interfata constructorului de rapoarte.
5. Pentru a edita un raport dintr-un proiect, ill fereastra Solution Explorer ill arborele de obiecte se
alege raportul respectiv ~i se face un click-drept pe acesta.
6. in meniul de context aparut se alege optiunea View Designer sau in cazul utilizatorilor mai
experimentati View Code. Ca rezultat, apare fila respectiva a constructorului.

Solution Explorer

G'.t Ci.. • 0 "


Se.arch )elution bplon:r (Chi ·· '1
eusita, · ~ Solution 'SSRS_5olution ' (1 project)
.o1 @I Report Project1
.o1 Shared Data Sources.
iii universitatea.rd~
Shared Data sets
... Reports
~
~ Open
Open \i\•ith ...

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

..........""'--'....... J2J Preview textbox2 Text Box


... !~ ai
z
ll: . >
B Number
Format
"' B Other
Bookmark
Curto mProperties
Stl!d~ot! R~u.sita DocumentMapl abel
[Cod_Grupa] HideD uplicate>
KeepTogether True
ParEnt ubiei
RepeatWit h
'I . Zindt· ....

'l~l )
[MunieSt udentl
( Position
[Tip Evaluarel fNota] ;,.. "I

" 2 .5~n, 022in


~ RowGroup; [!!!Jl Co lumn Groups Width 25 in
[ (table 1_Di;ciplina) Height 0.22in
r ft?. hlf"1 N11me<;t11rlPntl El V~btlitv

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

14. SERVICll DE ANALlzA DIMENSIONALA A DATELOR


Capitolul este consacrat caracterizarii instrumentelor de prelucrare a datelor multidimensionale,
fiind prezentate metodele de creare ~i gestionare a cuburilor n-dimensionale, utilizand componenta
Microsoft SQL Server 2017 Analysis Services. Sunt descrise mai multe aspecte de proiectare ~i mentinere
a cuburilor OLAP (Online analytical processing), revizualizarea ~i modificarea structurii unui cub,
incarcarea datelor intr-un cub, des~urarea ~i procesarea cubului, precum ~i interogarea cubului [1 ,5].
Analysis Services reprezinta solutia OLAP cu care Microsoft a patruns pe piata Business
Intelligence. OLAP este o metoda de acces rapida ~i comodli, de vizualizare ~i analiza a informatiilor de
afaceri care este realizata printr-un model de date, intuitiv clar, organizat in forma de cub n-dimensional.
Microsoft SQL Server 2017 Analysis Services (SSAS) furnizeaza instrumente pentru elaborarea,
proiectarea ~i mentinerea cuburilor ~i a altar obiecte OLAP sustinute.

14.1. lntroducere in OLAP


Un cub este o structura multidimensionala ce contine dimensiuni ~i mlisuri. Dimensiunile definesc
eptarilor, structura cubului, iar masurile furnizeaza utilizatorului valori numerice care caracterizeaza obiectul
economic. Valorile, ,,amplasate" de-a lungul dimensiunilor, se numesc membri. in calitate de structura
melor de logica, cubul permite unei aplicatii-client sa obtina datele in ~a mod, de parca celulele cubului definesc
Builder, orice valoare agregata posibila. Pozitia celulelor in cub sunt definite de intersectia dimensiuni-membru.
Jl Visual Dimensiunile se folosesc in alegerea ~i agregarea datelor la nivelul de detaliere cerut. Ele se organizeaza
\cest fi;ipt in ierarhii, constituite din mai multe nivele, fiecare din ele reprezentand un nivel de detaliere, necesar
pentru o analiza data.
In Microsoft SQL Server 2017 Analysis Services, un cub este elaborat in baza tabelelor ~i
viziunilor. Mlisurile cubului reprezinta fapte, iar dimensiunile lui sunt domenii de interes, cum ar fi timpul,
produsele ~i consumatorii. Un cub multidimensional este creat, folosind calcule, KPI-uri (key p erformance
In regim
indicators), actiuni, partitii, perspective ~i interpretari. Conceptul de cub este sinonim conceptului UDM
(Unified Dimensional Model), care scoate hotarul dintre modelul relational ~i eel multidimensional.
Masurile cubului se bazeaza pe coloanele din unul sau mai multe tabele-fapte ~i membrii
dimensiunilor cubului sunt bazate pe tabele-dimensiuni. Un cub poate fi elaborat ~i :fara sursa de date
relationala de baza. in acest caz, structura relationala de baza poate fi generata pentru a sustine cubul.
tn acesta Faptele in cub sunt agregate In baza ierarhiei dimensiunilor. Dimensiunile sunt bazate pe atributele care
sunt puse in corespondenta cu una sau mai multe coloane din tabelele-dimensiuni, iar ierarhiile se definesc
ajutorul in baza acestor atribute.
tn Query
raport sa 14.1.1. Un exemplu de cub
lizat sub Cubul permite stocarea datelor agregate ~i ierarhice. Un cub este format din mai multe dimensiuni,
iar agregarea datelor se face dupa atribute denumite masuri. 0 dimensiune poate av ea mai multe nivele.

Bauturi 10000 2000 1000


Masura
Prod use
5000 500 250
alimentare

Alte produse 5000 500 250


Servicii de analiza dimensionald 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).

14.1.2. "Taierea" cubului


Chiar ~i cubul tridimensional e greu de afi~at pe ecran, in ~a fel, ca sa se vada valorile masurilor
dezirabile. Dar ce sa mai vorbim despre cuburile cu un numar de dimensiuni mai mare decat trei? Pentru
vizualizarea datelor pastrate in cub, se folosesc, de obicei, tabelele bidimensionale obi~nuite cu denumiri
ierarhice de randuri ~i coloane.
Vizualizarile bidimensionale ale cubului pot fi obtinute, prin ,,taierea" (felierea) lui de-a curmezi~ul
uneia sau mai multor axe (dimensiuni): se fixeaza valorile tuturor dimensiunilor, in afara de doua ~i se
obtine un tabel obi~nuit. Pe axa orizontala a tabelului (denumirile coloanelor) e prezentata o dimensiune,
pe cea verticala (denumirile randurilor) - alta ~i in celulele tabelului - valoarea masurilor. Masurile sunt,
practic, considerate drept una din dimensiuni: sau se alege vizualizarea unei masuri (atunci coloanele ~i
randurile sunt doua dimensiuni), sau se vizualizeaza cateva masuri (~i atunci pe o axa a tabelului vor fi
denumirea masurilor, iar pe alta - valorile unicei dimensiuni ,,netaiate").
in figura urmatoare, e prezentata taietura cubului pentru o masura - Unit Sales (bucati vandute) ~i
doua dimensiuni ,,netaiate" - Store (Magazin) ~i Time (Timpul).

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:

_J~ Ianuarie II Februarie I


::.======:i! SUA I I
Canada Mexic I! SUA II Canada II Mexic lj
I Unit Sales I! 500 II 100 II 50 L 500 h 100 Ii 50 I·
I Store Sales II 7500 I 15o])J I 750 II 7500 II 1500 II 750 II
l Stc:._re Cost II 2500 II_ 500 II 250 II 2500 II 500 I 25~ 11

14.1.3. Metode de construire a cuburilor


Precum s-a mentionat anterior, utilizarea bazelor de date multidimensionale (OLAP) reprezinta o
metoda de acces rapida ~i comoda de vizualizare ~i analiza a informatiei.
Principalul avantaj in folosirea cuburilor este oferit de raspunsul rapid la cererile complexe datoritA
modului de organizare a datelor pe dimensiuni ~i masuri, permitftnd ~i agregarea acestora. Daca bazele de
date relationale OLTP sunt orientate pentru pastrarea datelor in forma normalizata, compacta ~i
consistenta ce ofera o viteza relativ mare in procesarea instructiunilor DML, bazele de date OLAP,
datorita formei denormalizate de pastrare a datelor, sunt orientate spre executarea extrem de rapida a
Servicii de analiza dimensionala a datelor

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.

14.2. Crearea unui proiect Analysis Services


in Visual Studio, inainte de construirea cubului, este necesar sa se creeze un proiect Analysis
Services in care va fi pastrat cubul. Un proiect Analysis Service creeaza o baza de date OLAP care poate
include In sine mai multe cuburi, dar orice cub nu poate exista in afara unui proiect.
Urmiitoarea procedura va crea un proiect Analysis Services, numit Primul meu cub, pentru a stoca
primul cub.
1. Se lanseaza Visual Studio 2017.
2. in fereastra Start Page se alege optiunea Create New Project ...
in rezultat, apare fereastra de dialog New Project care afi~eaza instrumente de modelare
accesibile pentru proiecte Business Intelligence (BI).
3. Se alege tipul de proiect Business Intelligence, apoi, in partea dreapta se face un click pe
~ablonulAnalysis Services Multidimensional and Data Mining Project.
4. in ciimpul de editare Name, se insereaza numele proiectului Primul meu cub.
Servicii de analiza dimensionala a date/or

NewProiect
t Rocent

-' Installed Type: Business lntellig<nce


t· Virnal C• An Ancly$i:;. Ser1ices project fo r creating
f. Visual Basic ~
rr0••
Integration Ser:ices Project Businfis lntelligence multidimensicnal and data mining
mcdels.
SQL Serter
-' Business Intelligence ~ii]
(gJ Report 5e.r1er Project Wl:z.ard Bus.iness Intelligence
Analysis Ser1ices
Integration Services
Reporting Ser1ices
ID! Report Serm Project Business Intelligence

i Other Project Types ~ Analysis Services Tabular Project Bus.ines-5 lnteJligence

~ Online
Not finding what you are looking for?
Open Visual Studto lmtaller
Name: Pnmul meu cub
],ocatton: .§.rcwse...

Solution name: Primul meu cub l2J Croate girectcry forsolution


OK Cancol

5. Se aplica un click pe butonul OK.


Fereastra Solution Explorer acum va poseda un set de dosare goale, care, mai tarziu, vor
contine obiectele pe miisura ce vor fl construite in proiectul Analysis Services.
lndata ce proiectul Analysis Services este creat, poate fl proiectat cubul cu sau :tara tabele-fapte ~i
tabele-dimensiuni gata de a fl utilizate in calitate de surse de date. Cubul constii dintr-una sau mai multe
miisuri, cum ar fl Sales (Vanziiri) sau Quantity (Volum) din tabelul-fapte ~i una sau mai multe dimensiuni,
cum ar fi Product (Produs) sau Time (Timp) din tabelul-dimensiuni. Cand se construie~te cubul cu surse
de date gata, asistentul Cube Wizard ajuta la selectarea tabelelor-dimensiuni ~i tabelelor-fapte potrivite.

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.

14.3.1. Construirea unui Cub nou


1. in Solution Explorer, se aplica un click-drept pe dosarul Cubes ~i apoi se face un click pe
optiunea New Cube. Se afi~eaza pagina Welcome to the Cube Wizard a asistentului. Asistentul
poate fl lansat ~i din meniul Project-> New Cube ... de pe bara de meniuri.
2. Se aplica un click pe butonul Next.
in urmatoarea procedura va fl selectata optiunea pentru crearea cubului cu formarea manuala a
tabelelor.

14.3.2. Specificarea metodei de construire


Apare fereastra Select Creation Method care include cateva optiuni de creare a cubului. Pentru
crearea cubului, utilizand tabele existente, se bifeazii Use existing tables. Pentru crearea
cubului vid, se alege Create an empty cube, iar pentru formarea manuala a tabelelor cubului,
se recurge la optiunea Generate tables in the data source ..
1. Se selecteaza optiunea Generate tables in the data source.
Servicii de analiza dimensionala a date/or

2. in ciimpul de editare Template, se selecteaza dintr-o lista derulanta optiuneaAdventure Works


Standard Edition
3. Se aplica un click pe butonul Next.
Ing in functie de optiunea aleasa pe pagina Creation Method, la urmatorul pas al asistentului se va
afi~a pagina respectiva.
Deoarece pe pagina Creation Method a fost selectata optiunea Generate tables in the data
source, apare pagina Define New Measures.
in urmatoarea procedura, vor fi definite pentru cub doua masuri, Sales Amount (Suma
viinzarilor) ~i Order Quantity (Cantitatea comandata).

14.3.3. Adaugarea masurilor


1. Pentru a suprima selectarile tuturor masurilor, se face un click pe butonul cu puncte de
suspensie din stanga butonului Measure Name, ~i apoi se bifeaza casutele de selectie
necesare, adica casutele din stanga optiunilor Internet Sales Amount ~i Internet Order
Quantity.
:el Trebuie mentionat ca aceste masuri sunt parte a unui grup de masuri numit Internet Sales.
Daca se rasfoie~te toata lista de masuri, se pot observa alte grupuri de masuri: Internet Orders,
Internet Customers, Sales Reasons, Reseller Sales, Reseller Orders, Sales Summary, Sales
Orders ~i Sales Targets. Fiecare grup de masuri este o colectie de masuri ce provin din acel~i
vor tabel-fapte.
2. Se revine la inceputul listei de masuri, se aplica un click in boxa ce contine Internet Sales
Amount ~i se schimba numele masurii in Sales Dollars.
te ~i
mite 3. Se repeta pasul precedent pentru a schimba numele Internet Order Quantity in Sales Units.
iuni, Astfel, numele masurilor oferite de ~abloane pot fi schimbate, ca sa satisfaca mai bine sensul.
urse Daca s-a uitat sa se modifice numele acestui pas al asistentului Cube Wizard, acest lucru poate
fl facut ~i in Cube Designer.
4. in coloana Measure Group, pentru riindurile Sales Dollars ~i Sales Units, se modifica numele
grupului de masuri Internet Sales 'in Sales.
?are
Pai inaDePne New Measures a asistentului, acum, va arata asemenea celei de mai jos:
ilui
'ica
1ale
Cube Wizard -::- ~·
tai,
Define New Measures
Define new measures and measure groups . You can edtt them later in Cube
Designer .
~I
.S.elect measures from template :
[!] Measure Name Measure Group Data Type Aflgregation I\

~ Sales Dollars Safes Currency Sum


pe Integer Sum
~ Sales Units Sales
ltul
D tr1bsrr1et S:tenoe.d A:q .. nt~rr1r::1 Saii:;s Cwn·en::,- s..ir
D internet T0>. -m:·u:1; inien1et Sal8s C.wrrerK-J Sun·,
D tnten-,e: ~rei9h1 Cos: !nter.1e: Sale~ 1 ~urre:1:::; S.ur1
laa 1-l 1memet Unn Pn°:7 S,::ilss c~~ns::· Swn

.&Jd new measures :


Measure Name Measure Group Data Type Aflgregation

tru
rea
ui,
Servicii de analizii dimensionalii a date/or

5. Se aplica un click pe butonul Next.


in fereastra Define new Dimensions ce apare, la cubul creat se adauga dimensiunile Product ~i
Date.

14.3.4. Adaugarea dimensiunilor


1. Pentru ~tergerea dimensiunilor oferite de ~ablon, se face un click pe butonul din stanga
butonului Type.
~abloanele contin o serie de dimensiuni care pot fi introduse in cub. Fiecare dimensiune, la
randul sau, contine atribute de stocare care nu pot fi modificate in limitele asistentului Cube
Wizard, dar ele pot fi liber modificate dupa terminarea lucrului cu asistentul.
2. Se aplica un click (casuta din stanga) pe dimensiunile Products ~i Time.
Ecranul va arata in modul urmator:

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.

Select dimensions from template :


Type Name SCD Mributes
~ Products Product D Produ:t. Standard ::.ost
D Regular D Saie~· P.easo"' SalcS'. F;
D Geograp•·1; GeograprN D Cit. '.3tat>?·Pivv1nce C..
D Regui;r Internet Sales Ord<:<r De1... D lmen·1el Sales •')rder C
D P.t::guiar D Reseiier 3ale~ Order, :::;

[~J Time Date 0 Fis.:;.;:' Yesc Jate. •:ale


D ~eguiar 5a!e-e Chann>Sj D Sa.es >:f·,anne1
,...., -· r-:J r:

~dd new dimensions :


Name SCD Mributes

<.!2_ack L
!iext > Cancel

3. Sa se considere atributele implicite pentru fiecare dimensiune. intotdeauna exista posibilitatea


de suprimare a atributelor ne-necesare sau de adaugare a atributelor dezirabile dupa terminarea
lucrului cu asistentul. Acum sunt prezente toate dimensiunile necesare pentru construirea
cubului. Se poate trece la urmatorul pas.
4. Se aplica un click pe butonul Next.
in urmatoarea fereastra Define Time Periods, se specifica datele de inceput ~i s!ar~it ale
datelor ce vor fi analizate. De exemplu, ianuarie 1, 2010 ~i decembrie 31, 2018, respectiv.

14.3.5. Definirea perioadelor de timp


1. Se aplica un click in meniul derulant First Calendar Day. Se parcurge calendarul actionand
sageata din stanga pana la luna ianuarie 2010, apoi se aplica un click pe data de inceput - 1.
in cazul in care se folose~te ~ablonul dimensiunii Time, e necesara definirea domeniului de
valori ale acestei dimensiuni. De asemenea, trebuie specificate acele atribute care vor ft incluse
in dimensiunea Time. De exemplu: an, trimestru ~i lunii.
Servicii de analizil dimensionalii a date/or

2. Se selecteaza 2018 din meniul derulant Last Calendar Day.


t ~i in cfunpurile de editare valorile date pot fi inserate, dar poate fi folositii, pentru aceasta, ~i
componenta calendar.
3. In panoul Time Periods, sunt selectate Year, Quarter ~i Month.
4. In panoul Time Periods, se scoate bifa din dreptul atributului Date.
nga
Odata cu debifarea atributului Date, apare un mesaj de atentionare in partea de jos a boxei de
dialog a asistentului: "The date frequency level is required. If you do not want it to be visible,
la you can hide this attribute in the dimension editor." Din motivul ca atributul Date al
ube dimensiunii Time este unul cheie, el trebuie neaparat sa fie inclus. in interiorul Analysis
Services, se folose~te un atribut-cheie pentru determinarea univoca a fiecarei inregistrari.
Trebuie mentionat ca trecerea, la urmatoarea pagina, nu poate fi realizata fara a fi inclus
atributul Date.

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.

,?.elect dimensions from template:


Type Name SCD Attributes
~ Products Product D Pr0du~. Stardam Cv$T .
D Regular Sal-:;; Re a ~on D Saie£· R'O'a3on Sales R
D Geography Geography D ':::,iv Stato::-Pn;;vn:e. 1:
D C\egular internet Sales (•pj~,r Det. D lrneMet ::.ales Cirder ,:._
D =;e9ula• Pee.e!ler Saies Or'.Jec C•e D Reseller $;::1es 0·-.Jet. C
[@.Jj Time Date D F1$Co Year Date :c•-=
D i=:egular D Sa:.::s Char,•··e'
" "' "
t,dd new dimensions :
Name SCD Attributes

-
'
--
<]iack Next ) Cancel
'- - - - '

5. Se bifeaza atributul Date, ~i se apasa butonul Next.


a
a in fereastra SpecifY Additional Calendars se va adauga un calendar fiscal, care incepe cu
i
March 1.

14.3.6. Adaugarea calendarului special


I. in pagina aparuta, se bifeaza casuta Fiscal Calendar.
Calendarele aditionale sunt optionale. Pentru crearea ierarhiilor alternative ale atributului
Time, sunt disponibile patru tipuri de calendare: Fiscal, Reporting, Manufacturing ~i ISO
8601 (International Standards Organization). in cazul utilizarii tuturor calendarelor (cu
exceptia ISO 8601), pentru alocarea potrivita a zilelor intr-o perioada de timp, poate fi indicata
data de inceput. De exemplu, daca se schimba ziua de start in calendarul Fiscal Calendar ill 1
March, atunci, pe parcursul sesiunii de vizualizare a cubului, zilele lunii March vor fi afi~ate
ca zile ale primei luni a anului fiscal.
2. Se seteaza Start Day And Month cu valoarea I March.
Servicii de analizii dimensionalii a date/or

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 fieporting {or marketing) calendar


~ .Januar/

0 Manufacturing calendar

0 ISO il£01 calendar

<ftack ~ I~ Next ~ _ J Cancel

3. Se aplica un click pe butonul Next.


in urmatoarea fereastra Define Dimension Usage, se vor specifica legaturile dintre dimensiuni
~i grupurile de masuri.

14.3.7. Stabilirea legaturilor dintre dimensiuni fi masuri


1. Se considera urmatoarele setari implicite de pe pagina Define Dimension Usage a asistentului
Cube Wizard:

I ti)
Define Dimension Usage
Cube Wizard

Specify how the dimensions relate to the measure groups in t he cube .


Cl -
Qimension usage :
Dimension Sales
······ · ········· · · ····~

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.

14.3.8. Finalizarea utilizarii asistentului Cube Wizard


1. in ciimpul de editare Cube Name, se insereaza numele: Cubul de vinzari.

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

[ ] (denerate schema no•N

<.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

~ Primul meu cub - Microsoft Visual Studio p - i:::l x


f ile tdit lfiew Ercject Jluild .Qebug Team D2taba-;e Data_2ourceView Cybe lools Te~t Analyze Window !::!elp Sign in Fl
• Develop1 • Default • • Start • fi ;;

-~ x
::" KPls @~ Acti ... (II Par... {i'!. Agg ... Q) Per... *<) Tra... {';l Bro ...

x DD :4'.J Solution 'Primul meu cub' (1 projec


A ~To Primuf meu cub
Name Measure Group Data Type Aggregation
Sales Currency Sum
ill Data Sources
ill Data Source Views
Integer Sum
A ill Cube;
0 Cubul de vinwi.cube
.11 ill Dimensions
~ Pro duct.dim
~Date.dim
ill Mining Structure;
ill Roles
' 0 Cubul de vinzar;-- - -
Click here to generate data source view ill Assemblies
lt ~Product
' it; ~ Date
ill Miscellaneous

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).

14.4. Revizualizarea structurii cubului in Cube Designer


Fila Cube Structure a instrumentului Cube Designer reprezinta obiectele-dimensiuni ~i masuri
care au fast definite pentru cub. in acest spatiu de lucru, pot fi revazute ~i modificate proprietatile fiecarui
obiect. Atunci cand se selecteaza vreun obiect, proprietatile acestuia sunt disponibile pentru redactare in
fereastra Properties (daca fereastra Properties nu este afi~ata in ciimpul de lucru, aceasta poate fi chemata
apasand tasta F4).
Fila Cube Structure ofera ~i un panel-diagrama in care se poate vizualiza structurile tabelelor de
baza pentru cub cu scopul de a vedea coloanele din tabele-dimensiuni ~i tabele-fapte ce sunt asociate.
Daca aceste tabele nu sunt create, pe panel va aparea un link - Click Here To Generate Data Source
View, la actionarea caruia se va lansa asistentul Schema Generation Wizard.
in urmatoarea procedura se va seta in calitate de masura implicita, masura Sales Dollars ~i se va
explora fila Cube Structure a instrumentului Cube Designer.
1. Se aplica un click pe Sales Dollars ill fila Cube Structure.
Se considera fereastra Properties ce apare mai jos de fereastra Solution Explorer. Ea
reprezinta efectiv toate proprietatile disponibile pentru obiectul selectat, adica pentru Sales
Dollars.
2
· Se actioneaza butonul Show Measures Tree, ·::: de pe hara de instrumente. tJ,
Panoul Measures afi~eaza grupul de masuri Sales ~i masurile asociate in forma de arbore.
3. Se efectueaza un click pe Sales 1n arborele masurilor.
Servicii de analizii dimensionala a date/or

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.

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:

• ' Uevelop1 • Uetault


:ea ce
-----·
)nata. Cubul devin.zari.cube [f}esign]* ->i X • Solution Explorer " If> X I
lTlll !(.. D, .. IID'iJ C... :S:- K... ¥!l A, .. 4) P... j i)l; A ... Ql P... (@ T ... fj) 6 ...

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.

14.5. Crearea tabelelor-dimensiuni fi tabelelor-fapte


La folosirea asistentului Cube Wizard pentru construirea unui cub tara sursa de date, este necesara
crearea unei haze de date relationale care va contine date ce vor fi incarcate in cub. Tabelele-dimensiuni ~i
tabelele-fapte pot fi create in mod manual, dar o metoda mai simpla este folosirea asistentului Schema
Generation Wizard. indata ce schema este construita, datele pot fi inserate in tabelele-dimensiuni ~i
tabelele-fapte cu scopul de a le putea vizualiza pe acestea In cub.

14.5.1. Generarea unei Scheme folosind asistentul Schema Generation Wizard


Asistentul Schema Generation Wizard ghideaza procesul de construire a schemei relationale. Dar,
mai intai, trebuie creata baza de date, in care asistentul va adauga tabelele-dimensiuni ~i tabelele-fapte ale
caror date vor fi incarcate in cub. Fiind construita structura relationala, asistentul adauga un DSV bazat pe
sursa de date specificata la proiectul realizat in Analysis Services. Sursa de date define~te informatia de
conexiune pentru sursa bazei de date, in timp ce DSV este reprezentarea structurilor ~i legaturilor dintre
tabelele ce vor fi utilizate la modificarea cubului ~i la incarcarea datelor in cub.
Cu alte cuvinte, la aceasta etapa se construie~te baza de date relationala de procesare analitica on-
line - ROLAP. Ea va fi folosita de cub, de baza de date OLAP.
in procedura urmatoare, se lanseaza asistentul Schema Generation Wizard.
l. Se lanseaza Microsoft SQL Server Management Studio. Se conecteaza la motorul de baze de
date.
2. in fereastra Object Explorer, se aplica un click-drept pe dosarul Databases ~i apoi un click pe
optiunea New Database.
3. Se insereaza numele bazei de date,primul_DW, apoi se aplica un click pe butonul OK.
4. Se trece la Visual Studio (la proiectul nostru) ~i apoi in panelul Diagram de pe fila Cube
Structure se face un click pe linkul Click Here To Generate Data Source View.
5. in consecinta, se deschide prima pagina a asistentului Schema Generation Wizard care se
nume~te Welcome to the Data Source Wizard. Aici se aplica un click pe butonul Next.
Servicii de analiziJ dimensionaliJ a date/or

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.

Data Source Wizard


Select how to define the connection
You can select from a number of ways in which your data source will define its connection
string

.., Create a data source based on g_nother object

~ · Create a data source based on an existing or new connection

Qata connections : Data connection properties :

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

Data Source Wizard

Impersonation Information
You can define what 'Windows credentials .Analysis Services will use to connect to the data
source.

(~'.• Use a @ecific Windows user name and password

J,!ser name : ETL_user

f'.assword:

Use the seryice account

() Use the cre\l_entials of the current user

!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.

Data Source Wizard

Completing the Wizard


Provide a name and then click Finish to create the new data source .

Qata source name:

£'.review:

Connection string:

Provider=SQLNCLl11.1 ;Data Source=MV;lntegrated Security=SSPl;lnttial Catalog=primul_DVv'

< !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

Schema Generation Wizard

Specify Tor-get
Specify the data source view in which to generate the schema.

:~) Qeate a new data source view

Data source view name: Prirnul rneu cub

Qata source: Prirnul OW

Anew data source view will be created for the data source you specify.

< !lack f!exn finish >>I

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 .

Pnmui meu cub

~ Create (!rimary ke)'s on dimension tables

~J Create [ndexes

RJ B.ely on referential integrity


~ Preserve gata on regeneration

Populate time table(s}: Populate

<.!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

• Create indexes creeaza, in schema generata, indec~i pe coloanele cheii exteme.


• Rely on referential integrity se bazeaza pe integritatea referentiala in cadrul schemei
generate. Daca nu este selectata aceasta optiune, legaturile sunt create, dar nu sunt
constranse cu acest tip de integritate.
• Preserve data on regeneration pastreaza datele in baza de date a domeniului de interes,
dupa ce asistentul ~i-a terminat activitatea. Daca aceasta optiune nu este selectata, toate
datele din baza de date a domeniului pot fi ~terse :tara avertisment.
• Campul de editare Populate time table(s) specifica modul in care asistentul populeaza
tabele temporale. Meniul derulant contine valorile posibile pentru aceasta optiune.
12. in cazul nostru, se considera implicit ca toate optiunile sunt selectate, deoarece acestea sunt
recomandate in calitate de strategii pentru proiectarea schemei relationale.
Se apasa butonul Next. Asistentul Schema Generation Wizard ia urmatoarea forma:

Specify Naming Conventions


Schema Generation Wizard

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

Bnish >>I Cancel

Pe pagina Specify Naming Conventions, pot fi ajustate conventiile de denumire folosite de


asistent, daca sunt standarde care se doresc utilizate.
• Delimitatorul implicit este sublinierea, dar poate fi folosit un spatiu sau chiar niciun
delimitator. in calitate de prefixe pentru cheile primare ~i exteme, se folosesc valorile
implicite PK ~i FK, respectiv, care, de asemenea, pot fi modificate.
• in cazul in care un atribut are atat o coloana-cheie, cat ~i o coloana-nume, denumirea
implicita a sufixului numelui de coloana este Name, care poate fi schimbat, daca nu
exista alt sufix cu acee~i valoare.
• Restul conventiilor asupra numelor sunt aplicate la sufixele utilizate pentru coloanele ce
suporta caracteristicile Analysis Services speciale: custom rollup, custom rollup
properties, unary operators ~i skipped levels. Pot fi schimbate valorile implicite ale
sufixelor pentru toate aceste tipuri de coloane, atunci cand fiecare valoare este unica
printre toate sufixele.
13. Se face un click pe butonul Next, ~i apoi pe Finish.
Fereastra Schema Generation Progress reprezinta statutul de procesare ~i ofera detalii asupra
p~ilor parcur~i. P~ii parcur~i sunt grupati pe categorii intr-un arbore. Procesul poate fi oprit
apasand butonul Stop. La terminarea prelucrarii, butonul Close devine activ.
Servicii de analiza dimensionala a date/or

Schema Generation Progress


iemei ?; /Z Generation of Schema and Packages completed ~fully.
0
sunt 0 Start Time: 21:45:55 End Time:2M7:13 Duration:0:0: 16
>, '~' Va li dating cub es and dimensions completed succes>fu lly.
<fl c;~ Updating data source view for subject area completed successfully.
teres, '.fl G Preparing SQLfor subject area database comp leted successfully.
to ate + ~ Updating subject area database comp leted successfu lly.
'±; ~ Changes saved successfu lly.
i.f.1 ~ Committing change.s to rnbject database.
.eaza

sunt

Gen<:rat1on Comµlete;J Succ b:fully.

Show Qetails Close

14. Se face un click pe butonul Close. Ecranul ia forma urmatoare:

Cubul devinzari.cube [Design]' iJ X

mm!(. Dim ... iffe! Cal ... ==- KP!s lil'!l Act... GI Par ... ti)!: Ag... 6J Per ... ;{i:J Tra .. . ~ Bro ...


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

Quarter _Name Q Cu bu I de vinzari.cube


Month "' ill Dimensions
Month_Name ti Product.dim
Day _Of_}ear
Day _Of_Y ear _Name
ti Date.dim

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

INSERT INTO Sales(FK_Product,FK_Date, Sales_Dollars,Sales_Units)


SELECT f .ProductKey, d.FullDateAlternateKey,
f .SalesAmount, f .OrderQuantity
FROM AdventureWorksDW2017.dbo.FactResellerSales f JOIN
AdventureWorksDW2017.dbo.DimDate d ON d.DateKey = f.OrderDateKey
COMMIT TRANSACTION;
Acum, datele s-au incarcat inprimul_DW. Tabelul-dimensiuni, dbo.Date, a fost populat, in mod
automat, cu ajutorul asistentului Schema Generation Wizard. Apoi, s-au efectuat operatie de
export al datelor din baza de date AdventureWorksDW2017 in tabelele dbo.Product ~i
dbo.Sales.
insa, datele inca n-au fost mcarcate in cub. Acest scop va fi atins in procedura urmatoare.

14.5.3. Procesarea dimensiunilor vs procesarea cuburilor


Procesarea unei dimensiuni ~i procesarea unui cub sunt doua sarcini distincte.
Servicii de analiziJ dimensionalii a date/or

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.

nei 14.5.4. Desfil!iurarea !Fi procesarea Cubului


in aceasta procedura, componenta Analysis Server va des~ura proiectul Primul meu cub pe care-I
va procesa ~i-1 va face accesibil pentru vizualizare.
1. in componenta Visual Studio, se aplica un click-drept pe proiectul Primul meu cub din
fereastra Solution Explorer, apoi in meniul de context aparut se actioneaza optiunea Deploy .

Solution Explorer ... f1, x


~ f::i, • T0 ·• tt il1i1 [@ "
:ste
in So:ardi Swlut1c,n E~rh.:ne~· 1(.td·· P ..
'ET
tile
Edit Database
de
Generate Relational Schema ...
in "' iilJ Data So urce Viev ..,
o"I Primul meu c '1..t Sho'N Deployment Progress
"' iilJ Cubes C Proces5 ...
uta Qi Cu bu I de vin: i;ti Build
"' ill Dimension5
k::: Product.d im
k::: Date.dim
iilJ Mining Structurf
iii) Role< 1'1""
11' New So lution Explorer View
ill A''emblies
~ ...
in fereastra output apare informatia despre starea curenta a procesului de des~urare a cubului
~i
rezultatele executarii etapelor principale de desta~urare.
Fereastra Deployment Progress, care implicit apare in partea stanga sus a mediului de
proiectare, monitorizeaza executarea activitatilor curente a componentelor procesului de
desta~urare ~i construie~te un arbore de obiecte desta~urate.
lnformatia detaliata despre des~urarea fiecarei componente a cubului poate fi obtinuta
expandand nodul respectiv al arborelui din aceasta fereastra.
in cazul executarii normale a procesului de desta~urare, in final, 'in partea de jos a ferestrei
Deployment Progress va aparea mesajul: Deployment Completed Successfully.
2. Implicit, des~urarea din cadrul Visual Studio proceseaza atat dimensiuni, cat ~i cuburi in
od cazul in care acestea sunt trecute ~i examinate, pentru prima data, de Analysis Server. La
de procesarea unui cub, Analysis Server copie valorile detaliate din tabelele-fapte intr-o structura
~i de date proprietar.
Dupa executarea cu succes a procesului de desta~urare, in meniul File, se aplica un click pe
optiunea Close Project.
Astfel, folosind asistentul Cube Wizard ~i ~ablonul oferit de Analysis Services, exista posibilitatea
de proiectare a unui cub independent de sursa existenta de date. Cuburile ~i dimensiunile create, utilizand
asistentul, nu intotdeauna pot reprezenta exact ceea de ce a fost nevoie. Structura cubului ~i structurile
Servicii de analizli dimensionalii a date/or

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.

14.6. lnterogarea cubului, folosind limbajul Multidimensional Expressions

14.6.1. Limbajul Multidimensional Expressions


Multidimensional Expressions (MDX) este un limbaj complet, bazat pe instructiuni, folosit pentru
definirea, lucrul ~i cautarea datelor in obiectele multidimensionale in cadrul sistemului SQL Server
Analysis Services (SSAS).
Multidimensional Expressions este un standard al limbajelor de interogare orientat spre analiza.
Sintaxa acestui limbaj este similara, in multe privinte, cu sintaxa SQL. Cu toate acestea, MDX nu este o
extindere a limbajului SQL. in realitate, unele functionalitati oferite de MDX sunt sustinute ~i de SQL, dar
nu atat de eficient ~i intuitiv.
Scopul interogarii MDX consta in extragerea valorilor din cubul OLAP ~i plasarea lor intr-un
raport. in timp ce cubul are dimensiuni, raportul nu le poseda. Acesta e constituit din axe (de obicei, axa-
randuri, axa-coloane ~i axa-filtru). Axa poate contine etichete dintr-una sau mai multe dimensiuni. Cubul
contine toate valorile posibile din toti membrii tuturor ierarhiilor de atribute ale tuturor dimensiunilor. Un
raport contine doar valorile selectate din nivelele selectate ale ierarhiilor de atribute selectate ale
dimensiunilor selectate. Prin urmare, interogarea MDX este o instructiune pentru extragerea raportului din
cub.

14.6.2. Executarea interogarilor MDX


SQL Server Management Studio ofera o interfata pentru scrierea interogarilor MDX, rularea
acestora ~i examinarea rezultatelor reprezentate in forma de grid. Fereastra interogarii MDX include un
panel pentru metadate, care permit vizualizarea ierarhiilor ~i membrilor unui cub, inserarea in expresiile
MDX a numelor de dimensiuni, de atribute ~i de membri.
Prin analogie cu interogarile SQL, e u~or de recunoscut clauzele folosite in interogarile MDX:
SELECT, FROM ~i WHERE. Clauza SELECT define~te ce membri vor fi inclu~i ~i unde vor fi plasati - In
randuri sau coloane. Clauza FROM denume~te cubul, iar clauza optionala WHERE restrictioneaza valorile
returnate de interogare pentru membrii enumerati.
Cu scopul de a face cuno~tinta cu interfata de interogari a sistemului SQL Server Management
Studio ~i cu sintaxa MDX, in continuare, sunt executate cateva interogari MDX simple.
1. Se lanseaza sistemul SQL Server Management Studio. Se conecteaza serviciul Analysis
Services.
2. in Analysis Server, se expandeaza dosarul Databases, apoi pe baza de date necesara se face un
click-drept, dupa care se alege optiunea New Query, apoi MDX

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

New Databa se...

Management New Query DMX


Script Databa ~e as ~ MDX

Process XMLA

Back Up ... DAX


Servicii de analiza dimensionala a date/or

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.

MDXQuery2.mdx - ... u cub (MV\ marian)* -J;I X


area Cube:
~ un

siile
1"-i' Functions

DX:
-in
121 %
)rile
Cubul de vinzari
. ~'i Messages .r··rm.··.··~.~.~~·lt.s"1

"lent !fl 111 Measures S80,45-0,5.9€.SS


'3'.'i F KPls
"lysis :fl · ~ Date
:£1 ·~ Product
eun

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 %

!§'lfj Messages ~ Results


Sales Units Sales Dollars
214.378 SHG,450,596.98
Servicii de analizd dimensionald a date/or

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').

SELECT {[ Measures]. {Sales Units], [ Measures]. [Sales Dollars]} ON COLUMNS ,


NON EMPTY [Date]. [Year - Quarter - Month - Date ].[Year] ON ROL~S
FROM [Cubu l de vinzari]
GO
SELECT {[Meas ures ].[ Sales Units],[Measures].[Sales Dollars]} ON COLUMNS ,
[ Date]. [Year - Quarter - Month - Date ]. [Year] .&[2011-01-01T00:00:00] ON RO\•JS
- FROM [Cubu l de vinzari] \1HERE [Product). [Product] .&[310]

121 % ~

~il Messages !ill Results

Sales Unrts Sales Dollars


Calendar 2010 82{} $489.328.58
Calendar 201 1 28.572 SlS,192.802 71
Calendar 2012 81,328 S28. 193.S3l5J
Calendar 2013 103..658 533.574,834 16

Sales Units Sales Dollars


Calendar 201 1 261 5560.357.08

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.

14.6.3. Explorarea dimensiunilor fi masurilor


Pentru explorarea dimensiunilor ~i masurilor unui cub poate fi utilizata fila Browser din Cube
Designer al mediului Visual Studio. Acel~i navigator este disponibil ~i in mediul Microsoft SQL Server
Servicii de analiztl dimensionalii a date/or

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

lica la ~g ~· ~j) Language: Default 6 L7 8 5


cat l?i T - -
cheii
MDX v Ni -t ! i~
Cubu1de vmari

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.

S-ar putea să vă placă și