· 8 years ago · Feb 08, 2018, 09:50 PM
1------------------------------------------ ISHOD 4 ------------------------------------------
2
3go
4
5-- 11 -- procedura koja prima ime i prezime komercijalista i ubacuje novoga, koroz izlazni parametar
6
7-- vraća novonastali id, odnosno -1 ukoliko isti već postoji (pa ga se ni ne mora ubacivat)
8
9
10
11create proc UbaciKomarcijalista
12
13 @ime nvarchar(50),
14
15 @prezime nvarchar(50),
16
17 @idKomercijalista int output
18
19as
20
21if exists (select IDKomercijalist from Komercijalist where Ime = @ime and Prezime = @prezime) begin
22
23 set @idKomercijalista = -1
24
25end
26
27else begin
28
29 insert into Komercijalist (Ime, Prezime)
30
31 values (@ime, @prezime)
32
33 set @idKomercijalista = SCOPE_IDENTITY()
34
35end
36
37go
38
39
40
41declare @idKomercijalista int
42
43execute UbaciKomarcijalista 'Isus', 'Krist', @idKomercijalista output
44
45print @idKomercijalista
46
47execute UbaciKomarcijalista 'Isus', 'Krist', @idKomercijalista output
48
49print @idKomercijalista
50
51go
52
53
54
55-- 12 -- procedura prima ID proizvoda, provjerava postoji li i je li kad prodan, preko return mora vratit
56
57-- sljedeće vrijednosti -1 (ne postoji), 0 (postoji, nikad prodan) 1 (postoji i prodavan n puta)
58
59
60
61create proc ProvjeriProizvod
62
63 @idProizvod int
64
65as
66
67if not exists (select Naziv from Proizvod where IDProizvod = @idProizvod) begin
68
69 return -1
70
71end
72
73if @idProizvod IN (select
74
75 p.IDProizvod
76
77 from Proizvod as p
78
79 where (select sum(Kolicina) from Stavka where ProizvodID = p.IDProizvod)IS NULL)
80
81begin
82
83 return 0
84
85end
86
87 return 1
88
89go
90
91
92
93
94
95declare @ajdi int = 1001
96
97declare @rezultat int
98
99-- postojeći, nikad prodani proizvod
100
101exec @rezultat = ProvjeriProizvod @ajdi
102
103print @rezultat
104
105-- postojeći prodavani proizvod
106
107set @ajdi = 707
108
109exec @rezultat = ProvjeriProizvod @ajdi
110
111print @rezultat
112
113-- nepostojeći proizvod
114
115set @ajdi = 20000
116
117exec @rezultat = ProvjeriProizvod @ajdi
118
119print @rezultat
120
121go
122
123
124
125select * from proizvod
126
127where (select sum(Kolicina) from Stavka where ProizvodID = IDProizvod) IS NOT NULL
128
129
130
131-- 13 -- implementirajte CRUD na Potkategorija s 2 procedure (C,U) i (R,D)
132
133-- napravite umetanje, izmjenu, dohvaćanje i brisanje jedne potkategorije
134
135
136
137go
138
139-- output varijabla je opcionalno i input varijabla, ak postoji promijeni, ak ne postoji inserta i u output da taj novi id
140
141create proc CU_Potkategorija
142
143 @idPotkategorije int output,
144
145 @naziv nvarchar(50),
146
147 @idKategorija int
148
149as
150
151if exists (select * from Potkategorija where IDPotkategorija = @idPotkategorije) begin
152
153 update Potkategorija
154
155 set Naziv = @naziv, KategorijaID = @idKategorija
156
157 where IDPotkategorija = @idPotkategorije
158
159end
160
161else begin
162
163 insert into Potkategorija (Naziv, KategorijaID)
164
165 values (@naziv, @idKategorija)
166
167 set @idPotkategorije = SCOPE_IDENTITY()
168
169end
170
171go
172
173
174
175-- demonstracija, prvo napravi pa updatea
176
177declare @noviAjdi int
178
179exec CU_Potkategorija @noviAjdi output, 'ZaPuknutLanac',4
180
181print @noviAjdi
182
183select * from Potkategorija where IDPotkategorija = @noviAjdi
184
185
186
187exec CU_Potkategorija @noviAjdi, 'KljucZaLanac', 4
188
189select * from Potkategorija where IDPotkategorija = @noviAjdi
190
191
192
193-- i još jedna procedura, ja sam sad tu stavila da je defaultno operacija R (valjda kao read oliti select ili get), ak se napise R ili nis, bu bilo R,
194
195-- za delete se bas mora navest D
196
197go
198
199create proc RD_Potkategorija
200
201 @ajdiPostojeci int,
202
203 @operacija char = 'R'
204
205as
206
207if @operacija = 'R' begin
208
209 select
210 *
211 from Potkategorija
212
213 where IDPotkategorija = @ajdiPostojeci
214
215end
216
217else if @operacija = 'D' begin
218
219 print 'Brise se potkategorija: ' + (select Naziv from Potkategorija where IDPotkategorija =@ajdiPostojeci)
220
221 delete from Potkategorija
222
223 where IDPotkategorija = @ajdiPostojeci
224
225end
226
227go
228
229
230
231declare @ajdiPostojeci int
232
233set @ajdiPostojeci = (select IDPotkategorija from Potkategorija where Naziv = 'KljucZaLanac')
234
235select * from Potkategorija where IDPotkategorija = @ajdiPostojeci
236
237exec RD_Potkategorija @ajdiPostojeci
238
239exec RD_Potkategorija @ajdiPostojeci, 'R'
240
241exec RD_Potkategorija @ajdiPostojeci, 'D'
242
243select * from Potkategorija where IDPotkategorija = @ajdiPostojeci
244------------------------------------------ ISHOD 5 ------------------------------------------
245-- Zadatak 1
246-- Napravite novu tablicu Zapisnik sa stupcima IDZapisnik i Sadrzaj.
247-- Napravite okidaè na tablici Država i vežite ga uz sva tri dogaðaja.
248-- U okidaèu saznajte koji dogaðaj ga je pozvao i to informaciju upišite u Zapisnik u jednom od oblika, npr:
249-- „Umetnut je novi redak s IDDrzava:61“
250-- „Obrisan je redak s IDDrzava: 55“
251-- „Promijenjen je redak s IDDrzava:85“
252-- Na tablici Drzava napravite umetanje jednog novog retka, izmjenu jednog retka i brisanje jednog retka. Uklonite okidaè.
253
254CREATE TABLE Zapisnik
255(
256 IDZapisnik INT PRIMARY KEY IDENTITY,
257 Sadrzaj NVARCHAR(MAX)
258)
259
260GO
261
262CREATE TRIGGER okidac ON Drzava
263AFTER INSERT, UPDATE, DELETE
264AS
265--trazenje ID-a:
266DECLARE @ID INT
267
268IF(EXISTS(SELECT * FROM inserted))
269 SELECT @ID = IDDrzava FROM inserted
270 --SET @ID = (SELECT IDDrzava FROM inserted)
271ELSE
272 SELECT @ID = IDDrzava FROM deleted
273
274--trazenje operacije koja se izvrsila:
275
276--INSERT - inserted ima podataka, deleted nema ništa
277IF(EXISTS(SELECT * FROM inserted) AND NOT EXISTS(SELECT * FROM deleted))
278 INSERT INTO Zapisnik(Sadrzaj) VALUES ('Umetnut je novi redak s IDDrzava:' + CAST(@ID AS NVARCHAR(10)))
279
280--UPDATE - i inserted i deleted imaju podataka
281ELSE IF(EXISTS(SELECT * FROM inserted) AND EXISTS(SELECT * FROM deleted))
282 INSERT INTO Zapisnik(Sadrzaj) VALUES ('Promijenjen je redak s IDDrzava:' + CAST(@ID AS NVARCHAR(10)))
283
284--DELETE - deleted ima podataka, inserted nema ništa
285ELSE IF(NOT EXISTS(SELECT * FROM inserted) AND EXISTS(SELECT * FROM deleted))
286 INSERT INTO Zapisnik(Sadrzaj) VALUES ('Obrisan je redak s IDDrzava:' + CAST(@ID AS NVARCHAR(10)))
287GO
288
289--testiranje triggera:
290--1) INSERT
291INSERT INTO Drzava(Naziv) VALUES('Drzava')
292--2) UPDATE
293UPDATE Drzava SET Naziv = 'Promjenjena Drzava' WHERE Naziv = 'Drzava'
294--3) DELETE
295DELETE FROM Drzava WHERE Naziv = 'Promjenjena Drzava'
296
297--provjera zapisa:
298--SELECT * FROM Zapisnik
299
300--DROP TABLE Zapisnik
301DROP TRIGGER okidac
302
303
304-- Zadatak 2
305-- Napravite novi okidaè i vežite ga uz UPDATE dogaðaj na tablici KreditnaKartica.
306-- Pretpostavimo da æe se mijenjati polja IstekGodina i IstekMjesec. Neka se okidaè ponaša na sljedeæi naèin:
307-- Ako je promijenjeno više od jednog retka, u Zapisnik upisati: „Promijenjeno više kartica“.
308-- Ako je promijenjen samo jedan redak, u Zapisnik upisati poruku s brojem mijenjane kartice
309-- (dodatak iz polja Broj u tablici KreditnaKartica) te sa starim i novim vrijednostima polja IstekMjesec i IstekGodina u sljedeæem obliku:
310-- „Promijenjeni podaci kartice broj BrojKartice. Staro trajanje je IstekGodina-IstekMjesec, novo trajanje je IstekGodina-IstekMjesec“.
311
312GO
313
314CREATE TRIGGER okidac ON KreditnaKartica
315AFTER UPDATE
316AS
317IF( (SELECT COUNT(*) FROM inserted) > 1 ) --promijenjeno više od jednog retka
318 INSERT INTO Zapisnik(Sadrzaj) VALUES('Promijenjeno više kartica')
319ELSE --promijenjen samo jedan redak
320BEGIN
321 --Provjera u tablici KreditnaKartica:
322 --Broj -> nvarchar(25)
323 --IstekMjesec -> tinyint
324 --IstekGodina -> smallint
325
326 --trebamo stari IstekGodina-IstekMjesec
327 DECLARE @stariIstekMjesec TINYINT
328 DECLARE @stariIstekGodina SMALLINT
329
330 --trebamo novi IstekGodina-IstekMjesec
331 DECLARE @noviIstekMjesec TINYINT
332 DECLARE @noviIstekGodina SMALLINT
333
334 --broj kartice na kojoj su se mijenjali ti podaci
335 DECLARE @brojKartice NVARCHAR(25)
336
337 --dohvacanje starih podataka iz tablice deleted
338 SELECT
339 @brojKartice = Broj,
340 @stariIstekGodina = IstekGodina,
341 @stariIstekMjesec = IstekMjesec
342 FROM deleted
343
344 --stari istek (Godina-Mjesec)
345 DECLARE @stariIstek NVARCHAR(50)
346 SET @stariIstek = CAST(@stariIstekGodina as NVARCHAR(20)) + '-' + CAST(@stariIstekMjesec as NVARCHAR(20))
347
348 --dohvacanje novih podataka iz tablice inserted
349 SELECT
350 @noviIstekGodina = IstekGodina,
351 @noviIstekMjesec = IstekMjesec
352 FROM inserted
353
354 --novi istek (Godina-Mjesec)
355 DECLARE @noviIstek NVARCHAR(50)
356 SET @noviIstek = CAST(@noviIstekGodina as NVARCHAR(20)) + '-' + CAST(@noviIstekMjesec as NVARCHAR(20))
357
358 INSERT INTO Zapisnik(Sadrzaj)
359 VALUES('Promijenjeni podaci kartice broj ' + @brojKartice + '. Staro trajanje je ' + @stariIstek + ', novo trajanje je ' + @noviIstek)
360END
361
362GO
363
364--provjera update-anja tablice KreditnaKartica
365INSERT INTO KreditnaKartica(Broj, IstekGodina, IstekMjesec, Tip) VALUES ('1234315', 2017, 12, 'tip')
366UPDATE KreditnaKartica SET IstekGodina = 2018, IstekMjesec = 11 WHERE IDKreditnaKartica = SCOPE_IDENTITY() --provjera jednog update-a
367INSERT INTO KreditnaKartica(Broj, IstekGodina, IstekMjesec, Tip) VALUES ('12343152', 2037, 11, 'tip')
368UPDATE KreditnaKartica SET IstekGodina = 2033, IstekMjesec = 2 WHERE Tip = 'tip' --provjera vise update-ova
369DELETE FROM KreditnaKartica WHERE Tip = 'tip'
370
371SELECT * FROM Zapisnik
372
373DROP TABLE Zapisnik
374DROP TRIGGER okidac
375
376-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -I6
377-- Zadatak 3
378-- Napišite proceduru koja prima XML dokument oblika:
379-- <Drzava Naziv="Hrvatska">
380-- <Grad>Bjelovar</Grad>
381-- <Grad>Vinkovci</Grad>
382-- <Grad>Koprivnica</Grad>
383-- </Drzava>
384-- Neka procedura ubaci poslanu državu i gradove u pripadne tablice Drzava i Grad.
385-- U proceduri provjerite da li poslana država veæ postoji.
386-- Ukoliko poslana država veæ postoji nemojte je ubacivati ponovo veæ joj pridružite poslane gradove.
387
388--kreiranje vlastitog tipa koji cuva nazive kao polje
389CREATE TYPE PoljeGradova AS TABLE
390(
391 Naziv NVARCHAR(50)
392)
393
394GO
395
396CREATE PROC DodajGradove
397 @xml XML
398AS
399
400-----------------------Naziv države-----------------------------------------
401
402--kreiranje varijable koja cuva naziv drzave (atribut na <Drzava>)
403DECLARE @NazivDrzave NVARCHAR(50)
404
405--hvatanje naziva pomocu xml-a
406SELECT
407--value('@ImeAtributa', 'Tip_Varijable')
408@NazivDrzave = Stupac.value('@Naziv', 'NVARCHAR(50)')
409--nodes('/izvorni tag/tag djeteta izvornog/...') AS Tablica(Stupac)
410FROM @xml.nodes('/Drzava') AS Tablica(Stupac)
411
412-----------------------Gradovi-----------------------------------------
413
414--varijabla koja cuva gradove
415DECLARE @Gradovi PoljeGradova
416
417--hvatanje gradova
418INSERT INTO @Gradovi
419SELECT
420Stupac.value('.', 'NVARCHAR(50)')
421FROM @xml.nodes('/Drzava/Grad') AS Tablica(Stupac)
422
423-----------------------Insertanje države i dohvaæanje ID-a-----------------------------------------
424
425--varijabla u koju smjestamo ID
426DECLARE @IdDrzava INT
427
428--ako ne postoji drzava s tim imenom, insertaj ju i dohvati uneseni ID preko SCOPE_IDENTITY()
429IF( NOT EXISTS(SELECT * FROM Drzava WHERE Naziv = @NazivDrzave) )
430BEGIN
431 INSERT INTO Drzava(Naziv) VALUES (@NazivDrzave)
432
433 SET @IdDrzava = SCOPE_IDENTITY()
434END
435
436--inace, postoji drzava s tim imenom pa u ID stavi njezin ID
437ELSE
438BEGIN
439 SELECT
440 @IdDrzava = IDDrzava
441 FROM Drzava
442 WHERE Naziv = @NazivDrzave
443END
444
445--------------------------Dodavanje gradova--------------------------------------
446
447INSERT INTO Grad(Naziv, DrzavaID)
448SELECT
449 Naziv, @IdDrzava
450FROM @Gradovi
451
452--------------------------Kraj procedure--------------------------------------
453
454GO
455
456EXEC DodajGradove
457'
458<Drzava Naziv="Hrvatska">
459 <Grad>Bjelovar</Grad>
460 <Grad>Vinkovci</Grad>
461 <Grad>Koprivnica</Grad>
462</Drzava>
463'
464
465SELECT * FROM Grad
466DELETE FROM Grad WHERE IDGrad > 13 --da se ne unose stalno gradovi pri pokretanju skripte
467
468DROP PROC DodajGradove
469DROP TYPE PoljeGradova
470
471GO
472
473-- Zadatak 4
474-- Napišite proceduru koja u jednom pozivu omoguæuje umetanje više proizvoda u tablicu Proizvod.
475-- Koristite tabliène varijable.
476-- create type
477
478--kreiranje tabliène varijable za unošenje proizvoda
479CREATE TYPE ProizvodiZaInsertanje AS TABLE
480(
481 Naziv NVARCHAR(50) NOT NULL,
482 BrojProizvoda NVARCHAR(25) NOT NULL,
483 Boja NVARCHAR(15),
484 MinimalnaKolicinaNaSkladistu SMALLINT NOT NULL,
485 CijenaBezPDV MONEY NOT NULL,
486 PotkategorijaID INT
487)
488
489GO
490
491--kreiranje procedure koja prima vlastiti tip
492CREATE PROC UnesiProizvode
493 @Proizvodi ProizvodiZaInsertanje READONLY --mora biti READONLY
494AS
495
496--bulk insert (unesi sve sto je u varijabli u tablicu Proizvod)
497INSERT INTO Proizvod
498SELECT * FROM @Proizvodi
499
500GO
501
502--kreiranje varijable koju saljemo u proceduru
503DECLARE @Proizvodi ProizvodiZaInsertanje
504
505--punjenje varijable
506INSERT INTO @Proizvodi(BrojProizvoda, CijenaBezPDV, MinimalnaKolicinaNaSkladistu, Naziv)
507VALUES
508('BE-123211', 0.00, 500, 'PRO1'),
509('BE-123212', 0.00, 500, 'PRO2'),
510('BE-123213', 0.00, 500, 'PRO3')
511
512--izvrsavanje procedure s varijablom
513EXEC UnesiProizvode @Proizvodi
514
515--provjera izvrsavanja procedure
516SELECT * FROM Proizvod
517
518DROP PROC UnesiProizvode
519DROP TYPE ProizvodiZaInsertanje
520
521-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -I7
522-- Zadatak 5
523-- Napišite proceduru s jednim parametrom IDKreditnaKartica koja briše zadanu kreditnu karticu,
524-- sve raèune koji su njome plaæeni i stavke tih raèuna.
525-- U transakciji izvan procedure pozovite proceduru tri puta s 3 razlièita podatka IDKreditnaKartica.
526-- Ispišite uspjeh ili neuspjeh cijele operacije.
527GO
528
529DROP PROC BrisiKreditnu
530
531GO
532
533CREATE PROC BrisiKreditnu
534 @IdKreditna INT
535AS
536
537--brisanje - samo podupiti
538DELETE FROM Stavka
539WHERE RacunID IN
540(
541 SELECT
542 r.IDRacun
543 FROM Racun AS r
544 WHERE r.KreditnaKarticaID IN
545 (
546 SELECT
547 kk.IDKreditnaKartica
548 FROM KreditnaKartica AS kk
549 WHERE kk.IDKreditnaKartica = @IdKreditna
550 )
551)
552
553--2. naèin brisanja (samo 1 podupit)
554/*
555DELETE FROM Stavka
556WHERE RacunID IN
557(
558 SELECT
559 r.IDRacun
560 FROM Racun AS r
561 WHERE r.KreditnaKarticaID = @IdKreditna
562)
563
564DELETE FROM Racun
565WHERE KreditnaKarticaID = @IdKreditna
566
567DELETE FROM KreditnaKartica
568WHERE IDKreditnaKartica = @IdKreditna
569*/
570
571GO
572
573--zapoèni transakciju
574BEGIN TRAN
575
576BEGIN TRY
577 --probaj izvršiti proceduru (3 puta)
578 EXEC BrisiKreditnu 3008
579 EXEC BrisiKreditnu 3009
580 EXEC BrisiKreditnu 3010
581 --ako je prošla, spremi promjene
582 COMMIT
583 --printaj uspjeh
584 PRINT '--- Brisanje uspjelo ---'
585END TRY
586
587BEGIN CATCH
588 --ako nije prošla, nemoj spremati promjene
589 ROLLBACK
590 --printaj neuspjeh
591 PRINT '--- Brisanje nije uspjelo ---'
592END CATCH
593
594
595
596-- Zadatak 6
597-- Opišite i na tablici Država demonstrirajte kako nastaje problem prljavog èitanja.
598-- Å to trebamo napraviti da se problem ne pojavljuje?
599
600--2.
601SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
602
603--3.
604BEGIN TRAN
605
606UPDATE Drzava
607SET Naziv = 'Nova Drzava'
608WHERE IDDrzava = 3
609
610--5.
611ROLLBACK
612
613--------------------------------------OVO SVE SE RADI U NOVOM QUERY-ju-------------------------------------------
614
615--1.
616SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
617
618
619--4.
620BEGIN TRAN
621
622SELECT * FROM Drzava
623
624--6.
625ROLLBACK
626
627-----------------------------------------------------------------------------------------------------------------
628
629--provjera ima li otvorenih transakcija
630SELECT @@TRANCOUNT
631
632------------------------------------------------------------------------------------------------------------------
633-- Da se problem ne pojavljuje trebamo obje konekcije staviti u Read Committed transakcijski izolacijski level. --
634------------------------------------------------------------------------------------------------------------------
635
636-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -I8
637--korištenje suèelja i Script opcije
638
639-- Zadatak 7
640-- Napišite skriptu koja radi slijedeæe:
641-- • Izraðuje punu sigurnosnu kopiju baze AdventureWorksOBP na neko mjesto na disku.
642-- • Umeæe redak u tablicu KreditnaKartica.
643-- • Radi diferencijalnu kopiju na isto mjesto.
644-- • Radi novu bazu imena AWOBP_Vraceno iz napravljenih sigurnosnih kopija. Nova baza treba sadržavati identiène
645--podatke kao i AdventureWorksOBP.
646
647--1. dio zadatka - full backup
648--AdventureWorksOBP -> Tasks -> Back Up...
649
650BACKUP DATABASE AdventureWorksOBP TO
651DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\Backup\AdventureWorksOBP.bak',
652DISK = N'D:\OBP\MojBackup' WITH
653NAME = N'AdventureWorksOBP - Full Database Backup'
654GO
655
656--2. dio zadatka - umetanje u Kreditnu Karticu
657INSERT INTO KreditnaKartica(Tip, Broj, IstekMjesec, IstekGodina)
658VALUES ('NekiTip','NekiBroj',3,2344)
659GO
660
661--3. dio zadatka - pravljenje diferencijnog backup-a
662--AdventureWorksOBP -> Tasks -> Back Up...
663
664BACKUP DATABASE [AdventureWorksOBP] TO
665DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\Backup\AdventureWorksOBP.bak',
666DISK = N'D:\OBP\MojBackup' WITH DIFFERENTIAL,
667NAME = N'AdventureWorksOBP-Full Database Backup'
668GO
669
670--4. dio zadatka - restoranje cijele baze u novu imena AWOBP-Vraceno
671--AdventureWorksOBP -> Tasks -> Restore -> Database
672
673USE master
674RESTORE DATABASE AWOBP_Vraceno FROM
675DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\Backup\AdventureWorksOBP.bak',
676DISK = N'D:\OBP\MojBackup' WITH FILE = 1,
677MOVE N'AdventureWorksOBP' TO N'C:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\DATA\AWOBP_Vraceno.mdf',
678MOVE N'AdventureWorksOBP_log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\DATA\AWOBP_Vraceno_log.ldf'
679GO
680
681----------------------------------------------------------------------------------
682
683-- Zadatak 8
684-- Omoguæite zaposleniku vaše firme Mirku Mirkiæu moguænost selektiranja podataka o proizvodima.
685-- Prava nemojte dodijeliti direktno njemu, veæ neka ih dobije èlanstvom u grupi.
686-- Neka korisnik ima minimalni skup prava potreban za obavljanje operacije.
687
688--Security -> Logins -> New Login... (SQL Server authentication, PW, No PW policy, User Mapping -> AdventureWorksOBP)
689
690USE master
691GO
692CREATE LOGIN MirkoMirkic WITH PASSWORD = '123'
693GO
694USE AdventureWorksOBP
695GO
696CREATE USER MirkoMirkic FOR LOGIN MirkoMirkic
697GO
698
699--davanje mogucnosti pregleda tablica Proizvod kreiranjem grupe
700--AdventureWorksOBP -> Security -> Roles -> New -> New Database Role... (Role name, Add... -> Browse... -> select user - OK -> OK,
701--Securables -> Search... -> OK -> Object Types... -> Tables - OK -> Browse... -> dbo.Proizvod - OK -> OK -> Grant Select - Script)
702
703--maknuti viška USE-ove
704
705CREATE ROLE PregledProizvoda
706GO
707ALTER ROLE PregledProizvoda ADD MEMBER MirkoMirkic
708GO
709GRANT SELECT ON dbo.Proizvod TO PregledProizvoda
710GO
711
712DROP LOGIN MirkoMirkic
713DROP USER MirkoMirkic
714DROP ROLE PregledProizvoda
715
716--brzo micanje uglatih zagrada: CTRL + F -> Quick Replace
717--(Find what: [, Replace with: (ostaviti prazno) - Replace All; ponoviti za ']')