SQL Server Data Tools, SQL Server 2012 ile birlikte gelen yeni bir tooldur. SSDT sayesinde yazılım geliştiriciler SQL Server Management Studio kullanma ihtiyacı olmadan, database oluşturma, tablo, view ,procedure gibi nesleleri oluşturma imkanına sahip olmaktadır.
SSDT Local DB
SQL Server Data Tools – Local DB özelliği ile geliştirme yapılan makinede SQL Server kurulumu yapılmamış olsada sanki SQL Server servislerinin kurulumu yapılmış gibi veritabanı oluşturmaya ve geliştirmeye imkan sağlar. Local DB özelliği sayesinde yazılım geliştiriciler makinalarına SQL Server kurulumu yapmak zorunda kalmazlar.
SSDT Local DB özelliğini kullanmak için Visual Studio’yu başlattıktan sonra New Project ekranında SQL Server şablonları altında SQL Server Database Project ‘i seçiyoruz.
Projeyi oluşturduktan sonra Visual Studio ‘da sağ tarafta bulunan SQL Server Object Explorer ekranında SQL Server bağlantılarımızı görebiliriz. Visual Studio’da SQL Server Object Explorer gözkümüyor ise View menüsünden SQL Server Object Explorer ile ekranı açabilir veya ( ctlr+ç , ctlr+s ) kısayolunu kullanabilirsiniz.
Ekranda bulunan localdb nesnesini incelediğimizde sanki bir SQL Server Instance gibi gözüküyor. Aslında yüklü olan bir SQL Server Instance değil, SSDT ile birlikte gelen Local Db özelliğidir.
SQL Server Object Explorer ekranında yeni bir tablo,view,procedure oluşturabilir veya daha önce oluşturulmuş nesneleri görüntüleyebiliriz.
SQL Server Data Tools İle Tablo Oluşturma
SQL Server Data Tools’ta tablo oluşturmak için SQL Server Object Explorer listesinde oluşturduğumuz database altında Tables nesnesine sağ tıklayıp Add New Table yöntemi ile veya SQL Server Solution Explorer penceresinde bulunan proje ismin sağ tıklayıp Add>New Item menüsü ile açılan ekrandan Table seçilerek oluşturabilirsiniz.
Karşımıza gelen ekranda Table’yi seçtikten sonra ismini Table_First olarak tanımlıyor ve Add ile oluşturuyorum.
Tabloyu projemize ekledikten sonra karşımıza eklediğimiz tabloyu düzenlememiz için “Desing” ekranı geliyor. SQL Server Data Tools ile gelen en güzel özelliklerden birisi de T-SQL penceresinde yazdığımız sorgunun aynı anda görsel ekran olan Desing ekranına da yansıması. Aynı şekilde desing ekranında yapılan değişikler de T-SQL kodlarının bulunduğu pencereye yansımaktadır.
Tabloyu tasarladıktan sonra kaydediyor ve ekranı kapatıyoruz. Oluşturmuş olduğumuz tablonun Local DB’ye eklenmesi için Debug(F5) ile deploy ediyoruz.
SQL Server Object Explorer penceresinde LocalDB > SSTD_LocalDB> Tables altında oluşturmuş olduğumuz tablonun eklendiğini görüyoruz.
Oluşturduğumuz tabloda değişikli yapmak isterseniz SQL Server Object Explorer penceresinde ilgili tabloya sağ tıklayıp View Designer / View Code seçeneği ile tablo düzenleme ekranlarına ulaşabiliriz.
Bir diğer tabloda değişiklik yapma yöntemi ise; Visual Studio ekranında Solution Explorer penceresinde bulunan “tablo_adi.sql” dosyasına çift tıklayarak yada sağ tıklayıp Open diyerek tablo düzenleme ekranına ulaşabiliriz.
Tablo üzerinde değişiklik yaptıktan sonra tekrar
SSDT – Mevcut Olan Veritabanından Local Db Projesi Oluşturmak
Kullanmakta olduğumuz bir veritabanını SQL Server Data Tools ‘a proje olarak ekleyebilirsiniz. Visual Studio’yu açtıktan sonra SQL Server Object Explorer penceresinin üstündeki “Add Server” düğmesi ile bilgisayarımda kurulu olan SQL Server Instance’a bağlanıyorum. Daha sonra var olan bir AdventureWorks2014 veritabanına sağ tıklayıp gelen menüden Create New Project seçeneğini seçiyoruz.
Karşımıza gelen ekranda oluşacak SSDT projesinin ismini ve hangi dizinde saklanacağı belirledikten sonra, yeni bir Solution oluşturulacak ise Create new solution kutusunu işaretliyoruz. Create new solution işaretlemezsek var olan solution’a yeni bir proje olarak eklenecektir.
Import kutucukları ile hangi nesnelerin projeye import edilip edilmeyeceğini belirleyebiliyoruz. Folder Structure açılır kutusu ile nesnelerin klasörde nasıl tutulması gerektiğini belirleyebiliyoruz ve Maximum files per folder değeri ile de her bir klasörde en fazla kaç tane nesne olabileceğini belirleyebiliyoruz.
Import tercihlerimizi yaptıktan sonra Start düğmesi ile import işlemini başlatıyoruz.
Import işlemi tamamlandıktan sonra Finish düğmesine tıklayarak ekranı kapatıyoruz.
Import işlemi bittikten sonra SSDT_AdventureWorks isimin verdiğimiz projemiz solution explorer’da oluşmuş olacaktır.
SQL Server Object Explorer Local DB’ye baktığımızda SSDT_AdventureWorks veritabanının oluştuğunu görebiliyoruz.
Dikkat ettiyseniz Local DB’de veribanımız oluştu ancak debug(F5) yapıp deploy etmediğimiz için veritabanı nesnelerimiz oluşmadı.
Debug işleminden sonra tekrar kontrol ettiğimizde nesnelerin oluştuğunu görebilirsiniz.
SSDT – Publish İşlemi
SQL Server Data Tool üzerinde değişiklik ve geliştirme yaptığımız veritabanı projesini nasıl publish yapabileceğimizi göreceğiz. SQL Server Data Tools ile geliştirilen veritabanı projesi SQL Server 2005 ve üst versiyonlara publish yapılabileceği gibi Azure üzerinde olan Instance’nıza da publish yapabilirsiniz.
SSDT projemizi hangi SQL Server versiyonuna publish yapabileceğimizi;
PROJECT > ProjeAdi_Properties menüsü ile karşımıza gelen özellikler sayfasından değiştirebiliyoruz.
Publish işlemi için daha önce oluşturduğum “SSDT_LocalDB” projesini kullanacağım. Solution Exlorer’de bulunan SSDT_LocalDB projesine sağ tıklayıp Publish seçeneğini seçiyorum.
Karşımıza gelen ekranda;
Target database connection : Publish işlemini hangi instance ve veritabanına yapacağımızı edit düğmesi ile belirliyoruz.
Database name ve oluşacak publish script dosyasının adını belirliyoruz. Gelişmiş publish seçenekleri için Advanced… düğmesi ile Advanced Publish Setting ekranını açıyoruz.
Nesnelerin silinip yeniden mi oluşturulacağı, deploy yaparken veritabanını single user mode almasını, deploy işleminden önce yedek alınıp alınmayacağı gibi gelişmiş seçenekleri bu ekranda tanımlayabiliyoruz.
Her publish işleminde bilgilerin ve ayarların tekrar tekrar yapılmasını istemiyorsanız Save Profile seçeneği ile yapılandırma ayarlarınızı kaydedebilirsiniz. Tekrar publish yapmak istediğinizde sadece Load Profile düğmene tıklayarak publish ayarlarınızı yükleyebilirsiniz.
Save Profile dedikten sonra Solution Explorer penceresinde bulunan projemizin içerisinde projeadi.publish.xml dosyası oluştuğunu görüyoruz.
Generate Script düğmesi ile de publish scriptini oluşturabiliyoruz.
Oluşan bu script içeriğini hedef sunucu üzerinde çalıştırarak publish yapabiliriz.
Publish düğmesine tıklayarak direk hedef sunucu üzerinde projemizi yayınlıyoruz.
Publish işleminden sonra SQL Server Management Studio ‘ya bağlantı kurup veritabanı projemizin sağlıklı bir şekilde publish olup olmadığı kontrol ediyor ve publish işlemi sonucu hedef sunucuda veritabanı ve nesnelerin oluştuğunu görüyoruz.
Şimdi publish yaptığım proje üzerinde değişiklik yapıyor ve yeni bir nesne daha oluşturuyorum.
Tablo tasarım modunda değişiklik yapar yapmaz Solution Explorer ‘da bulunan SSDT_LocalDB projesinin içerisinde SSDT_LocalDB.refactorlog dosyası oluştuğunu görüyoruz.
Yaptığımız değişiklik sonucunda projeAdi.refaktorlog dosyasında bir kayıt seti eklendiğini görüyoruz. Projeye “Second_Table” isminde bir tablo daha ekliyorum.
Tekrar oluşmuş olan refactorlog dosyasını inceliyoruz.
Dikkat ettiyseniz refactorlog dosyasında yeni eklediğimiz tablo için bir kayıt eklenmediğini bu dosyaya sadece kolonlar ile ilgili yapılan değişikliklerin tutulduğunu görmüş oluyoruz.
SSDT – Schema Karşılaştırma
Schema karşılaştırma işlemini 3. Parti uygulamalar ile gerçekleştirebiliyorduk. Artık SQL Server Data Tools ile kolayca ve ücretsiz olarak schema karşılaştırma işlemini yapabiliriz. Önceliklekle schema karşılaştırma işlemi sıklıkla; program geliştiriciler development ortamındaki veritabanı üzerinde bir değişiklik yaptığında, veritabanı yöneticisine değişikliği bildirmemiş olabilir. Aynı şekilde veritabanı yöneticisi de yaptığı değişikliği development ortamında bulunan veritabanına yansıtmamış olabilir. Uygulama kodlarındaki geliştirmeler yayına alındığında canlı sistemde olan veritabanı ile geliştirme ortamındaki olan veritabanı arasındaki farklılıktan dolayı hatalar meydana gelebilir. Bu hatalara engel olabilmek için 2 ortamdaki veritabanı schema yapısı karşılaştırılmalı varsa değişiklikler veya çakışmalar kodlar yayına alınmadan önce müdahale edilmelidir.
SQL Server Data Tools yardımı ile Schema karşılaştırma özelliğini görebilmek için hem SQL Server Management Studio’da bulunan bizim oluşturduğmuz “SSDT_LocalDB” veritabanı içinde bulunan “Table_First” tablosunda schema yapısını değiştireceğim hemde SSDT üzerinde olan SSDT_LocalDB projesindeki Table_First tablosundaki schema yapısını değiştirip bu iki taraftaki schema değişikliklerini karşılaştıracağız.
Öncelikle SQL Server Management Studio üzerinde olan veritabanımdaki “Table_First” tablosunun “CreatedDate” kolonunun siliyorum.
Daha sonra SSDT üzerindeki SSDT_LocalDB projemdeki Table_First tabloma “UpdatedDate” diye bir alan daha ekliyorum.
SSDT_LocalDB projesi içinde “Table_Second” isminde bir tablo daha oluşturuyorum.
İki veritabanında da değişiklikler yapıldığına göre artık Schema Compare özelliğini kullanabiliriz. Bu işlem için Solution Explorer’da bulunan SSDT_LocalDB projesine sağ tıklayıp Schema Compare… seçiyorum.
Gelen ekrandan karşılaştırma yapacağım veritabanının kaynağını ve hedef veritabanı kaynağını seçiyorum. Veritabanı kaynağı olarak SSDT_LocalDB projesindeki veritabanımı kullanıyorum. Hedef olarak farklı bir instance’da bulunan yine aynı isimdeki veritabanını kullanıyorum.
Hedef ve kaynak veritabanını seçtikten sonra, ekranın sol üstünde bulunan Compare düğmesine basıyorum.
Compare işlemi tamamlandıktan sonra “Result” ve “Object Definitions” isminde 2 bölümden oluşan bir ekran karşılıyor bizi.
Result bölümünde karşılaştırılan veritabanları içinde farklı olan objeler mevcutken, Object Definition bölümünde ise seçili olan farklılığın detayları gösteriliyor.
Karşılaştırma yapılan her iki veritabanında da aynı isimde bir tablo nesnesi olduğu için bize arasındaki farkları gösteriyor, ancak kaynak veritabanına oluşturduğum “Table_Second” tablosu hedef veritabanında olmadığı için Result ekranında Add klasörü altında toplanıyor ve Object Definition kısmında ise sadece kaynaktaki tablo yapısı gösterilebiliyor.
Veritabanları arasındaki farklılıkları inceledikten sonra iki veritabanını birbiri ile eşitlemek için üst tarafda bulunan Update düğmesi ile veya Generate Script yardımıyla eşitleme işlemini tamamlayabilirsiniz.
Generate Script komutu ile eşitleme işlemi için gereken sorguyu SSDT sizin için oluşturabiliyor. Oluşan bu sorguyu hedef veritabanında çalıştırmanız işlemi tamamlamak için yeterli olacaktır.
Update butonu ile değişiklikleri direk hedef veritabanı üzerinde uygulayabilirsiniz.
SSDT – Project Snapshot
SQL Server Data Tools ile proje veritabanının snapshot’unu alabiliriz. SSDT snapshot yapısı SQL Server’da var olan snapshot ile aynı yapıya sahiptir. Snapshot basit bir tanımla ; veritabanının herhangi bir anında alınan salt okunur bir kopyası, görüntüsüdür denilebilir.
SSDT ile Snapshot Oluşturma
SSDT ile snapshot olurşturmak için Solution Explorer penceresinde bulunan projemize sağ tıklayıp açılan menüden “Snapshot Project” seçeneğini seçiyoruz.
Snapshot Project komutunu verdikten sonra çok hızlı bir şekilde projemiz içerisinde “Snapshot” diye bir klasör oluştuğunu ve içerisinde “proje_adi_tarih_saat.dacpac” isimli bir snapshot dosyası eklendiğini görüyoruz.
Oluşturmuş olduğumuz snapshot dosyasını projelerimize import ederek yeni bir proje veritabanı oluşturabilirsiniz.
SSDT – Tablodaki Verileri Aktarmak İçin Insert Sorgusu Oluşturmak
SQL Server Data Tools ile oluşturmuş olduğumuz proje veritabanındaki bir tablo içindeki verileri başka bir yere aktarmak için satırların Insert script’ini kolaylıkla oluşturabilirsiniz. SQL Server Object Explorer penceresinden script’ini almak istediğimiz tabloya sağ tıkladıktan sonra “View Data” seçeneğini seçiyoruz.
Karşımıza gelen pencerenin üst kısmında bulunan “Max Rows” değerini “All” olarak değiştiriyoruz. Bu sayede tabloda bulunan tüm kayıtlar için script oluşturabileceğiz.
Max Rows seçeneğini değiştirdikten sonra insert script’ini oluşturabiliriz. Insert sorgularını oluşturmak için Max Rows kutucuğu yanında bulunan iki düğmeyi de kullanabiliriz.
Script düğmesini kullanırsak SSDT bizim için bir sorgu ekranı açıp bu ekranda bize kayıtlarımızın insert sorgusunu verecektir.
Script düğmesi yanında bulunan “Script To File” düğmesini kullanırsak SSDT bizim için bu insert sorgularını barındıran “.sql” uzantılı bir dosya oluşturacak ve belirteceğimiz dizine kaydedecektir.
SSDT – Code Analysis
SQL Server Data Tools aracının en sevdiğim özelliklerinden birisi olan Code Analysis; dizayn,isimlendirme,performans açısından sorun teşkil edecek potansiyel durumlar için analiz yapar. Code Analysis özelliği sayesinde geliştirme aşamasındayken potansiyel sorunları tespit edebilir ve proje / kod kalitesini arttırabilirsiniz.
Code Analysis özelliği ile birlikte kontrol edilecek olan kuralları ayarlamak için: View > ProjeAdi_Properties menüsünden aşağıdaki yapılandırma ekranına ulaşabilirsiniz.
Kontrol edilmesini istemediğimiz durumları bu ekrandan kaldırabilirsiniz. “Enable Code Analysis on Build” seçeneğini işaretlerseniz her build işleminden sonra code analysis özelliği otomatik olarak çalışacaktır.
Code Analysis özelliğini çalıştırmak için solution explorer’da bulunan projemize sağ tıklayıp Run Code Analysis seçeneğini seçiyoruz.
Code Analysis özelliğini test etmek için “Usp_GetCategory” isminde bir stored procedure ve “Vw_GetAllRows” isminde bir view oluşturdum.
Sorgularda da görüldüğü gibi iki sorgu cümlesi de kullanılması önerilmeyen, performans kaybına sebep olan bir yazım şekline sahip.
Code Analysis çalıştıktan sonra analiz sonusunu “Error List” penceresinden görebilirsiniz.
Analiz sonucunda view’de kullanmış olduğum “SELECT * “ şeklinin, prosedürde kullandığım “%” LIKE ve INT türündeki bir alanda string şekilde bir değerle koşul verdiğim için bu üç uyarıyı almış oldum.
Code Analysis ile birlikte daha geliştirme ortamındayken olası potansiyel hataları tespit edip düzeltmemiz hep kod kalitemizi arttıracak hemde canlı ortama daha az risk ile geliştirmiş olduğumuz kodları / nesneleri gönül rahatlığı ile aktaracağız.
SSDT – Refactor
SQL Server Data Tools ile birlikte kullanabileceğimiz bir diğer güzel özelliklerden birisi de Refactor menüsüdür. SSDT sorgu ekranında sağ tıkladıktan sonra gelen bu menüde dört seçenek mevcuttur.
Refactor > Rename
Nesnenin kendini ve kullanıldığı tüm yerlerdeki ismini değiştirmek için kullanılır.
Karşıma gelen Rename penceresinden Table_Second ismindeki tablomun adını Table_Second_2 olarak değiştiriyorum.
Preview changes seçeneği işaretli bırakılırsa ismini değiştireceğimiz nesnenin kullanıldığı tüm yerlerin listesi oluşturulacak ve Ok komutu verdikten sonra karşımıza gelecektir.
Bu ekranda değişiklikten etkilenecek nesneleri görebilirsiniz. Son olarak Apply komutunu verdikten sonra seçilen nesnenin adı kendisi ile birlikte referans olarak kullanılan tüm yerlerde değiştirilecektir.
Refactor > Move To Schema
Seçilen nesnenin kendisi ile birlikte kullanıldığı tüm yerlerdeki schema bilgisi değişecektir. Rename komutu ile aynı çalışma mantığına sahiptir.
Refactor > Expand Wildcards
Expand Wildcards seçeneği ile birlikte “Select * “ şeklinde yazmış olduğunuz sorgularınızı “Select kolon_adlari” şekline çevirebilirsiniz. Tek tek kolon isimlerini yazmak yerine hızlıca tüm kolon isimlerini sorgunuza dahil edecek ve size hız kazandıracaktır.
Refactor > Fully-qualify Names
Full-qualify Names özelliği sayesinde “Select kolon_adlari” şeklinde olan sorgunuzdaki kolon isimlerinin başına alias “Select [Alias].KolonAdi” ekleyecektir. Expand Wildcards seçeneğinde olduğu gibi esas amaç kodlama aşamasında daha hızlı geliştirme / düzenleme sağlamasıdır.
SQL Server Data Tools ile birlikte gelen Refactor menüsü sayesinde kodlamalardaki değişiklikleri çok hızlı bir şekilde gerçekleştirmenize imkan sağlamaktadır.