SQL Server

SQL Server Data Tools SSDT Nedir

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.

clip_image002

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.

clip_image004

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.

clip_image006

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.

clip_image008

clip_image010

Karşımıza gelen ekranda Table’yi seçtikten sonra ismini Table_First olarak tanımlıyor ve Add ile oluşturuyorum.

clip_image012

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.

clip_image014

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.

clip_image016

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.

clip_image018

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.

clip_image020

Tablo üzerinde değişiklik yaptıktan sonra tekrar clip_image022 Debug(F5) etmemiz gerektiğini unutmayalım. Aksi halde yapılan değişiklikler Local Db üzerindeki tabloya uygulanmayacaktır.

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.

clip_image024

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.

clip_image026

Import tercihlerimizi yaptıktan sonra Start düğmesi ile import işlemini başlatıyoruz.

clip_image028

Import işlemi tamamlandıktan sonra Finish düğmesine tıklayarak ekranı kapatıyoruz.

clip_image030

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.

clip_image031

Dikkat ettiyseniz Local DB’de veribanımız oluştu ancak debug(F5) yapıp deploy etmediğimiz için veritabanı nesnelerimiz oluşmadı.

clip_image033

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;

clip_image035

PROJECT > ProjeAdi_Properties menüsü ile karşımıza gelen özellikler sayfasından değiştirebiliyoruz.

clip_image037

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.

clip_image039

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.

clip_image041

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.

clip_image043

Save Profile dedikten sonra Solution Explorer penceresinde bulunan projemizin içerisinde projeadi.publish.xml dosyası oluştuğunu görüyoruz.

clip_image044

Generate Script düğmesi ile de publish scriptini oluşturabiliyoruz.

clip_image046 

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.

clip_image048

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.

clip_image050

Şimdi publish yaptığım proje üzerinde değişiklik yapıyor ve yeni bir nesne daha oluşturuyorum.

clip_image052

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.

clip_image053

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.

clip_image054

Tekrar oluşmuş olan refactorlog dosyasını inceliyoruz.

clip_image055

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.

clip_image056

clip_image057

Daha sonra SSDT üzerindeki SSDT_LocalDB projemdeki Table_First tabloma “UpdatedDate” diye bir alan daha ekliyorum.

clip_image059

SSDT_LocalDB projesi içinde “Table_Second” isminde bir tablo daha oluşturuyorum.

clip_image061

İ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.

clip_image063

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.

clip_image064

Compare işlemi tamamlandıktan sonra “Result” ve “Object Definitions” isminde 2 bölümden oluşan bir ekran karşılıyor bizi.

clip_image066

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.

clip_image068

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.

clip_image069

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.

clip_image071

Update butonu ile değişiklikleri direk hedef veritabanı üzerinde uygulayabilirsiniz.

clip_image073

clip_image075

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.

clip_image077

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.

clip_image079

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.

clip_image081

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.

clip_image083

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.

clip_image085

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.

clip_image087

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.

clip_image088

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.

clip_image090

Code Analysis özelliğini test etmek için “Usp_GetCategory” isminde bir stored procedure ve “Vw_GetAllRows” isminde bir view oluşturdum.

clip_image092 

clip_image094

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.

clip_image095

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.

clip_image096

Refactor > Rename

Nesnenin kendini ve kullanıldığı tüm yerlerdeki ismini değiştirmek için kullanılır.

clip_image098

Karşıma gelen Rename penceresinden Table_Second ismindeki tablomun adını Table_Second_2 olarak değiştiriyorum.

clip_image100

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.

clip_image102

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.

clip_image104

clip_image106

clip_image108

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.

clip_image109

clip_image111

clip_image113

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.

clip_image115

clip_image117

clip_image119

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.

İlgili Makaleler

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu