View
--------------------------------- View ----------------------------- --Sanal Tablolardır. --(İndexed viewleri hariç kendi verileri yoktur.) --Raporlama araçlarında sık kullanılır. --eğer sadece sql değilde visiual studio da çalışıyorsak view yerine (TypedDateSet)kullanabiliriz. --Viewlerde sadece select kullanabiliriz. Ondan sonra ancak insert, uodate, delete yapabiliriz. -- Bana 09 ağustos çikolatanın indirimi %10 ' a çıkacak eğer parasını ödemişler varsa bu farkı bonus olarak kartlara verin. --OBJELER CREATE İLE OLUŞTURULURU. VİEW DE BİR OBJEDİR. create view vw_UrunleriveKategorileriGetir as select c.CategoryName, p.ProductName from Products p join Categories c on c.CategoryID=p.CategoryID --eğer view tablo ise select ile çağırabiliriz. select * from vw_UrunleriveKategorileriGetir --çalışanların adlarını ve soyadlarını ek kolon halinde getirecek şekilde ve yaşlaını da getiren bir view create view vw_Calisanlar as select Firstname +' '+ LastName 'Ad ve Soyad', DATEDIFF(YYYY,BirthDate,GETDATE())'Yas' from Employees select * from vw_Calisanlar --Hangi çalışan(Çalışanın adı ve soyadı) hangi müşeriden(şirketin adı) hangi tarihte(Order Date)sipariş almıştır. create view vw_Siparis as select e.FirstName +' '+ e.LastName as Calisan, c.CompanyName as Müsteri, o.OrderDate as Tarih from Employees e join orders o on o.EmployeeID=e.EmployeeID join Customers c on c.CustomerID=o.CustomerID select * from vw_Siparis --vw_Siparis viewı üzerinde Müşteri değeri 'Vins et alcools Chevalier' olan ve tarih değeri '1996-07-04 00:00:00.000' olan kadın çalışan kolonunu çağlar temur yapın. --Kural-1 --birden fazla (FirstName ve LastName) kolonu birleştirdiğiniz zaman değiştirme yapılmaz. Ama eğer tek kolondan gelsydi update olurdu. update vw_Siparis set Calisan='Çağlar Temur' where Müsteri='Vins et alcools Chevalier' and Tarih='1996-07-04 00:00:00.000' --hata satırı --Update or insert of view or function 'vw_Siparis' failed because it contains a derived or constant field. --vw_Siparis Calisan değeri Nancy Davolio olan kayıtların müsteri değer, çağlar ve tarihi 11.11.2011 yapın --Kural-2 --instead of trigger kullanmadığınız sürece view üzerinde birden fazla tabloyu etkileyecek işlem yapamazsınız. update vw_Siparis set Müsteri='çağlar', Tarih='11.11.2011' where Calisan='Nancy Davolio' --hata satırı --View or function 'vw_Siparis' is not updatable because the modification affects multiple base tables. --sadece müsteri kolonunu güncelleyecelim. update vw_Siparis set Müsteri='Caglar LTD' where Calisan='Nancy Davolio' --yorum satırı (65 row(s) affected) 65 satır etkilendi. -- vw_Siparis view üzerinde irden fazla kaynak tabloda güncelleme yapmak için --1) instead of trigger yazılır create trigger tg_GuncellemeYap on vw_Siparis instead of update as declare @eskiCalisan varchar(31), @eskiMusteri varchar(40), @eskiTarih datetime declare @yeniCalisan varchar(31), @yeniMusteri varchar(40), @yeniTarih datetime select @eskiCalisan=Calisan, @eskiMusteri=Müsteri, @eskiTarih=Tarih from deleted select @yeniCalisan=Calisan, @yeniMusteri=Müsteri, @yeniTarih=Tarih from inserted -- ÖDEV Çalışan gücellemesi bize ait update Customers set CompanyName=@yeniMusteri where CompanyName=@eskiMusteri update Orders set OrderDate=@yeniTarih where OrderDate=@eskiTarih and CustomerID in --inin yazılma sebebi eğer öğre () içindeki kümeden biri ise ( select CustomerID from Customers where CompanyName=@yeniMusteri ) --viewda birden fazla kaynak tablouyu etkileceyecek update update vw_Siparis set Müsteri='Hasan LTD', Tarih='11.11.2011' where Calisan like '%Nanc%'