Tabloda Kolon gizlemek(Hide Column in table)

SQL 2017 ile gelen bu özellik  ile tablolarımızın kolonlarını  gizleyebileceğiz.

Bazı durumlarda tablo da bazı kolonların gözükmesini istemeyiz bunun için  kolon bazlı yetki verirdik bu işlem sırasında istenilen kolonlarda aşağıda ki gibi grant ile yetki verebilir ya da deny komutu ile yetkisini alabilirdik.

GRANT SELECT ON [dbo].[Employee] ([EmployeeId]) TO [Doctor];

Mevcut yetkilerini almak için aşağıda ki script kullanılabilir.

DENY SELECT ON [dbo].[Employee] ([EmployeeId]) TO [Doctor];

Fakat bu işlemler yapıldıktan sonra SELECT*FROM Employe şeklinde sorgulama yapmak istersek permission hatası verecektir.Fakat yapacağımız yöntemde ise gizlediğimiz kolon  hiç eklenmemiş gibi sonuç dönecektir.

Yapacağımız yöntemde SELECT*FROM Employe dediğimizde  o tablo da gizlediğimiz kolon gözükmeyecektir ve herhangi hata dönmeyecektir. Şimdi uygulama kısmına geçelim.

CREATE TABLE TEMP0RAL_TABLE
(
id int not null primary key clustered,
Name nvarchar(30),
address nvarchar(200),
startdate datetime2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL  ,
enddate datetime2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL ,
period for system_time(startdate,enddate)
)
WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.TEMP0RAL_TABLE_history));

Tabloyu oluştururken gizlemek istediğimiz kolonları seçerek gizledik ve bundan sonra sorgularda özellikle yazılmadığı sürece Mssql o tabloyu  yokmuş gibi davranacaktır.

Gizleme özelliğini tabloyu oluşturduktan sonra oluşturmak isterseniz aşağıda ki sorgu yardımıyla oluşturabilirsiniz.

ALTER TABLE [dbo].TEMP0RAL_TABLE  ALTER COLUMN [personcredit] ADD HIDDEN;

Yukarı da oluşturulurken nasıl yapılacağından bahsettik fakat bu özellik için gereken koşulları veya limitleri bahsetmedik biraz da onlar da bahsedelim.

* Gizli olarak değiştirilen kolon, alan tahsisinin iki kat yer kaplar; Orijinal kolon  ve yeni oluşturulan gizli kolondan dolayı.

* Tablo da kolonu gizlemek için GENERATED ALWAYS  komutunun da olması gerekmektedir.

* Gizlenen kolonlar direk  silinemez.

* Tabloda yapılan işlemlerde gizlenen kolon özellikle belirtilmediği sürece   işlem dışında kalır.

* Gizlenen kolon SSMS üzerinden  Column sekmesinin altından görülebilir.

Temporal table  hakkında detaylı bilgi almak için  MSSQL Temporal Table adlı  makaleyi okuyabilirsiniz.

Loading