26 Nisan 2018 Perşembe

SQL Server Tips 4-Primary key, Unique key ve Foreign Key Arasındaki Farklar


Bugünkü yazımda sizlere PRIMARY KEY, UNIQUE KEY ve FOREIGN KEY arasındaki farkları anlatmak istiyorum.   Biz Developerların en çok araştırdıkları konulardan birisi bu üçü arasındaki farklardır.

PRIMARY KEY ve UNIQUE KEY birbirlerine benzerler ve tanımlandıkları sütununda benzersizlik sağlarlar.

PRIMARY KEY
  • PRIMARY KEY bir NULL değer alamaz
  • Bir tabloda sadece bir tane PRIMARY KEY olabilir.
  • Default olarak PRIMARY KEY bir Cluster Indextir. Datalar tableda Cluster Indexe sıralanmış durumdadır.
  • PRIMARY KEY diğer tablolardaki alanlarla FOREING KEY olarak ilişkilendirilebilir.
  • PRIMARY KEY temporary table  ve table variable içinde kullanabiliriz.
  • PRIMARY KEY  kolonunda otomatik artan identity set edilebilir.
  • PRIMARY KEY  diğer bir tablo ile FOREIGN KEY olarak ilişkilendirilmişse silinemez. Öncelikle
FOREIGN KEY olan tablodan silmemiz gerekir.


UNIQUE KEY
  • UNIQUE KEY bir defa olmak üzere NULL değeri alabilir.
  • Bir tabloda birden fazla UNIQUE KEY olabilir.
  • Default olarak  UNIQUE KEY unique non-clustered indextir.
  • UNIQUE KEY diğer tablolardaki alanlarla FOREING KEY olarak ilişkilendirilemez

FOREIGN KEY
  • FOREIGN KEY başka bir tablodaki    PRIMARY KEY alandır.
  • Birden fazla NULL değer kabul edebilir.
  • FOREIGN KEY otomatik olarak clustered or non-clustered index oluşturmaz. Manuel oluşturmamız gerekir.
  • Bir tabloda birden fazla FOREIGN KEY  olabilir.
  • Temporary table  veya table variable FOREIGN KEY barındıramaz.

23 Nisan 2018 Pazartesi

SQL Server Tips 3-DateTime ve DateTime2 Arasındaki Farklar


DateTime2 veri tipi SQL Server 2008 ile birlikte hayatımıza girmiştir. Aşağıdaki tabloda DateTime ile DateTime2 arasındaki farkı özetlemektedir.



DateTime
DateTime2[(n)]
Min Değer
1753-01-01 00:00:00
0001-01-01 00:00:00
Max Değer
9999-12-31 23:59:59.997
9999-12-31 23:59:59.9999999
Data Boyutu
8 Bytes
6 to 8 bytes
Not:Parametre N isteğe bağlıdır. Belirtilmemişse kesirli saniye hassasiyeti 7 haneli olabilir. Kesirli saniye için hassasiyet <3'den 6 bayt,  3 veya 4 için kesirli saniye için hassasiyet  7 bayt 4den büyükse 8 bayt alır

Kullanımı
Declare @now datetime
Declare @now datetime2(7)
Uyumluluk
ANSI/ISO uyumlu değildir.
ANSI/ISO uyumludurç.
Şimdiki Tarih ve Saati Getiren Fonksiyon
GetDate()
Örnek: SELECT GETDATE()
Sonu.: 2011-09-16 13:23:18.767
SYSDATETIME()
Örnek:SELECT SYSDATETIME()
Sonuç: 2011-09-16 13:23:18.7676720
+/- days
DECLARE @nowDateTime DATETIME = GETDATE() SELECT@nowDateTime + 1
Sonuç: 2011-09-17 13:44:31.247
DECLARE @nowDateTime2 DATETIME2=SYSDATETIME()SELECT @nowDateTime2+1
Sonuç: Msg 206, Level 16, State 2, Line 2
Operand type clash: datetime2 is incompatible with int


22 Nisan 2018 Pazar

SQL Server Tips 2- CHAR, NCHAR, VARCHAR ve NVARCHAR arasındaki farklar


CHAR, NCHAR, VARCHAR ve NVARCHAR  data tiplerinin hepsi text veya string verilerini saklamak için kullanılır. Ancak aralarında bazı farklar vardır.

CHAR Veri Tipi: Sabit uzunlukluklu unicode olmayan data tiplerini saklamak için kullanılır. CHAR(n) şeklinde kullanımı vardır. 1 ile 8000 arasında değer alabilir.  İçine girilen değer ne olursa olsun tanımlandığı kadar alanı kaplar.

VARCHAR Veri Tipi: Değişken uzunluklu unicode olmayan data tiplerini saklamak için kullanılır. İçine girilen değer kadar alanı kaplar.   1 ile 8000 arasında değer alabilir.   Sabit uzunluklu alanlar için CHAR veri tipini değişken uzunluklu alanlar için VARCHAR veri tipini kullanmamız doğru olacaktır.

NCHAR Veri Tipi:CHAR veri tipinin unicode data tiplerini saklamak için kullanılır.   1 ile 4000 arasında değer alabilir. 

NVARCHAR Veri Tipi :VARCHAR veri tipinin unicode data tiplerini saklamak için kullanılır.   1 ile 4000 arasında değer alabilir.  Hem NCHAR hemde NVARCHAR veri tipleri N olmayanlara göre iki kat fazla alan kapladığı için sadece Unicode ifadeler için kullanılmalıdır.

SQL Server Tips 1-Stored Procedure ile Function Arasındaki Farklar


SQL Server konusunda kısa kısa ipuçları vereceğim bu yazı dizimde ilk olarak Stored Procedure ile Function arasındaki farklardan bahsetmek istiyorum.  Siz değerli bilişimci arkadaşlar elbette ikisi arasındaki farkları merak ediyorsunuzdur.  Bu yazımda kısaca ikisi arasındaki ortak noktalardan ve farklardan bahsedeceğim.

İkisi arasındaki ortak özelliklerden bahsedecek olursak
Her ikiside bir veritabanında saklanır. Yani içinde bulunan T-SQL ifadeler ağ üzerinden gönderilmez. Buda ağ trafiğini aşağıya düşürür. Her ikiside yanlızca bir kez derlenir. İlk kez çalıştığında execution plan cache belleğe alınır. Tekrar tekrar çağrıldığında performansı büyük ölçüde artar.

Aralarındaki Farklara  Gelecek olursak

Basit Farklar

  • Function mutlaka bir değer döndürmesi gerekirken Stored Procedurde bu isteğe bağlıdır. (Stored Procedur 0 veya n değerlerini döndürebilir.)
  • Functionlar sadece input parametrelerine sahip olabilirken stored procudrler input/output parametrelerine sahip olabilir.
  • Functionlar stored prosedürden çağrılabilirken stored prosedürler function üzerinden çağıralamazlar.
  • Functionlar SELECT deyimi ile çağrılabilir. Stored Prodesedürleri çalıştırmak için Execute/Exec komutu kullanılmalıdır.

Gelişmiş Farklar
  • Prosedür, SELECT'in yanı sıra DML (INSERT / UPDATE / DELETE) ifadesine izin verirken, Fonksiyon sadece SELECT ifadesine izin verir.
  • Procedur bir SELECT deyiminde  kullanılamazken, Function bir SELECT ifadesinde kullanılabilir.
  • Stored Prosedürler WHERE/HAVING/SELECT bölümünün herhangi bir yerinde kullanılamazken Functionlar kullanılabilir.
  • TRY-CATCH bloğu bir stored prosedürde kullanılabilirken, TRY-CATCH bir functionda kullanılamaz.
  • Stored Prosedüre Transaction yapısı ile kullanılabilirken Function Transaction yapısını desteklemez.

14 Nisan 2018 Cumartesi

SET STATISTICS IO (Transact-SQL) Kullanımı

Bu komut TSQL sorguları tarafından oluşturulan disk ve bellek etkinliği miktarıyla ilgili bilgileri görüntülememizi sağlar.

SET STATISTICS IO ON;olduğunda istatistiksel bilgiler görüntülenir. Bu seçenek açık olduktan sonra aşağıdaki komut kullanılana kadar tüm istatistiksel bilgiler görüntülenir. 
SET STATISTICS IO OFFolduğunda istatistiksel bilgiler kapatılır.

Aşağıdaki örnekte SQL uygulanırken kaç tane mantıksalve fiziksel okuma olduğu gösterilmektedir.


USE [AdventureWorks2016CTP3]
GO        
SET STATISTICS IO ON; 
GO 
SELECT *  
FROM Production.ProductCostHistory 
WHERE StandardCost < 500.00; 
GO 
SET STATISTICS IO OFF; 


(269 rows affected)
Table 'ProductCostHistory'. Scan count 1, logical reads 5, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

(1 row affected)

Sql Server DateTime Veri Tipindeki Datayı Türkçe Formatında Göstermek

  SQL'de tarihleri farklı formatlarda göstermek için FORMAT fonksiyonunu kullanabilirsiniz. Türkçe kısa tarih formatı genellikle "...