Bu yazımda sizlere T-SQL de VİEW yapısından bahsedeceğim.Kullanım amaçları genellikle karmaşık sorguların tek bir sorgu üzerinden çalıştırılabilmesidir.Bu amaçla raporlama işlemlerinde kullanılabilir.Aynı zamanda güvenlik ihtiyacı olduğunda, herhangi bir sorgunun diğer şahıslardan gizlenmesi amacıyla da kullanılırlar.
Herhangi bir sorgunun sonucu tablo olarak ele alıp, ona sorgu çekilebilmesini sağlarlar.
Insert,update ve delete yapabilirler.Bu işlemin sonucunu fiziksel sorguya yansıtırlar.(Bu madde önemlidir.)
View ler normal sorgulardan daha yavaş çalışırlar.
create view vw_Gotur as select p.Adi as Adı,k.KategoriAdi as [Kategori Adı],COUNT(s.SatisID) as [Toplam Satış] from Personeller as p inner join Satislar as s on p.PersonelID=s.PersonelID inner join [Satis Detaylari] as sd on s.SatisID=sd.SatisID inner join Urunler as u on sd.UrunID=u.UrunID inner join Kategoriler as k on u.KategoriID=k.KategoriID group by p.Adi,k.KategoriAdi select * from vw_Gotur select * from vw_Gotur where Adı='Andrew'
View oluşturulurken kolonlara verilen aliaslar,view den sorgu çekilirken kullanılırlar.
View ın kullandığı gerçek tabloların kolon isimleri,view içinde “as” ile alias yapılarak gizlenmiş olur.
View içide order by kullanılamaz.
Order by view içinde değil,view çalışırken view ile beraber kullanılmalıdır.
Eğer illaki ben view içinde order by kullanacam kardeşim diyorsanız,view içinde top kullanmalısınız.Buda tavsiye edilen bir durum değildir.
go create view denemeadsad as select top 5 Adi,SoyAdi from Personeller order by Adi
Viewler üzerinde insert,update,delete v.s. gibi işlemler yapabiliriz.Bu işlemlerin sonucu viewin kullandığı gerçek tabloya yansıtılır.
create view deneme23
as
select Adi as Adı,SoyAdi as Soyadı from Personeller
insert deneme23 values('123','456')
delete from deneme23 where Soyadı='456'
update deneme23 set Soyadı='Gençay' where Soyadı='Yıldız'
Eğer view i oluşturan komutların, Views klasöründen üzerine sağ tıklayıp Design modda açılarak görüntülenmesini istemiyorsak “with encryption” komutu ile viewi oluşturmalıyız.
Not:”with encryption” işleminden sonra viewi oluşturan da dahil kimse komutları göremez.Geri dönüş yoktur.Ancak viewi oluşturan komutların yedeğini bulundurmalıyız ya da bu komutları “with encryption” olmadan alter lamalıyız.
Bir dikkat etmemiz gereken nokta da “with encryption” ifadesini “as” ifadesinden önce yazmalıyız.
create view denemeview with encryption as select Adi as ADI,SoyAdi as SOYADI from Personeller
Bu işlemi yaptıktan sonra Design modu kapatılmıştır.
NOT!!! : Eğer view in kullandığı tabloların kolon isimleri bir şekilde değiştirilir,kolonları silinir ya da tablo yapısı bir şekilde değişikliğe uğrar ise view in çalışması artık mümkün olmayacaktır.View in kullandığı tablolar ve kolonları bu tarz işlemler yapılabilmesi ihtimaline karşı koruma altına alınabilir.Bu işlemler “with schemabinding” komutu ile yapılabilir.
“with schemabinding” ile view create ya da alter edilirken,viewin kullandığı tablo,schema adıyla birlikte verilmelidir.
Örneğin , dbo(database owner) bir şema adıdır.Şemalar C# taki namespaceler gibi düşünülebilir.
create view denemeview2 with schemabinding as select Adi,SoyAdi from dbo.Personeller go create view denemeview3 as select Adi,SoyAdi from Personeller where Adi like 'a%'
Yukarıdaki view Personeller tablosundan baş harfi a ile başlayanların adını ve soyadını getiriyor.
Hatta bu view e insert yapalım.
insert denemeview3 values('Ahmet','Yıldız'),
('Gençay','Yıldız')
“denemeview3” isimli view imiz adı “a” ile başlayan kayıtları getirmektedir.Bu durum da bu viewi kullanarak baş harfi “c” ile başlayan bir veri kayıt etmek mantıksız gelebilir.Bu durumda view in where şartına uygun kayıtları işlemesine müsaade edip,uymayan kayıtları işlememesine müsaade etmeyebiliriz.”with check option” komutu ile bu sağlanabilir.
go create view denemeview4 as select Adi,SoyAdi from Personeller where Adi like 'a%' with check option
NOT: “with encryption” ve “with schemabinding” komutları “as” komutundan önce gelirken “with check option” komutu where şartından sonra gelmektedir.