Ažuriranje (update) view – a

Objavljeno: 10-03-2014 | Autor: Žana (Jovana) Baćović | Kategorija: T-SQL, View-ovi

Ознаке:

0

View može da služi samo za čitanje podataka (read only view) ili da bude promjenljiv, odnosno da nad njim mogu da se pišu dml (Data Manipulation Language) naredbe update, insert i delete.

Read only view

Postoji više načina da view bude read only, navešću samo jedan pošto nisu tema ovog članka.
Read only svojstvo view-a može da se postigne i tako što se na kraju upita koji ga kreira doda union all sa uslovom koji neće biti zadovoljen.
Primjer: Nad Kefalo bazom izvršiti sledeći upit:

Ukoliko pokušate da izvršite update:

SQL Server će prijaviti grešku da view ima izvedeno ili konstantno polje i neće izmijeniti podatke.

View nad samo jednom tabelom

Kada view sadrži podatke iz samo jedne tabele i ne sadrži agregatne funkcije (a pri tome nije read only), može da se radi ažuriranje (update) view-a.
Primjer: Ako uzmemo view iz prethodnog primjera, bez union all dijela, naredbe update, insert i delete nad njim će se izvršiti bez problema.

Update iz prethodnog primjera, nad view-om koji nije read only će se izvršiti bez greške:

Nakon update-a view-a, podaci su izmijenjeni u izvornoj tabeli, pa tako upit:

daje sledeći rezultat:

Azuriranje view-a_1

Naredbe INSERT i DELETE će takođe biti izvršene i izazvaće izmjene u izvornoj tabeli, što možete da provjerite izvršavanjem sledeća četiri upita jedan za drugim:

View nad dvije ili više tabela

Ukoliko view ima kolone iz više od jedne tabele, moguće je ažuriranje view-a ukoliko se u jednoj naredbi mijenjaju kolone samo iz jedne tabele.
Izmjena kolona iz različitih tabela nije moguća u jednom update upitu.
Primjer: Nad Kefalo bazom kreirati sledeći view:

Update koji mijenja podatke nad jednom od tabela će se izvršiti.
Primjer: Izmjena kolona Ime i Prezime iz tabele dbo.Autori, kao i izmjena kolone Crtac iz dbo.CrtaniFilmovi je moguća u dva odvojena update upita:

SELECT upiti:

daju sledeće rezultate:

Select azuriranog view-a

Ukoliko pokušamo da uradimo update kolona iz dvije različite tabele, SQL server će nam javiti grešku, jer nije dozvoljena izmjena nad više osnovnih tabela istovremeno.

Primjer: Sledeći upit:

vraća grešku:
View or function ‘dbo.AutoriCrtaca’ is not updatable because the modification affects multiple base tables.

Instead of trigger nad view–om

Postavljanjem instead of trigger–a nad view–om, moguće je izmijeniti kolone iz dvije različite tabele. U tom slučaju, parametre update komande preuzima trigger koji sadrži logiku koja omogućava izmjenu dvije ili više tabela.
Primjer: Kreirajte sledeći trigger:

Nakon kreiranja instead of update trigera, možemo da provjerimo njegovu funkcionalnost izvršavanjem update-a koji mijenja podatke u dvije osnovne tabele.
Primjer: Sledeći upit modifikuje sve kolone view-a:

Izvršavanjem select naredbe nad osnovnim tabelama, možete da potvrdite da su podaci izmijenjeni:

Ovakav triger može da se koristi i za ažuriranje read only view-a.
Analogno naredbi update, odgovarajući instead of trigeri mogu da se kreiraju za naredbe insert i delete.

Napišite komentar