SQL Sıralı GUID Vermek – SQL NEWSEQUENTIALID

SQL Sıralı GUID Vermek – SQL NEWSEQUENTIALID

4 Ocak 2019 2 Yazar: Mustafa BÜKÜLMEZ
Toplam Görüntülenme : 236
Yaklaşık okuma süresi : 3 DK
SQL Guid vs Sequential GUID - Performans Karşılaştırması
SQL Insert, Update, Delete Output
SQL Sıralı GUID Vermek – SQL NEWSEQUENTIALID
5 (100%) 1 Oy

SQL Sıralı GUID VermekSQL NEWSEQUENTIALID, yazım ile SQL eğitim setime devam ediyorum. Son zamanlarda sık sık konuşulan GUID’ kavramını biliyorsunuz. Aslında uzun zamandır var olan ama son zamanlarda popüler olan GUID (en azından ben yakın zaman önce farkettim. 😀 ) çakışma olayının yok denecek kadar az olması durumu açısından tercih ediliyor.

Elbette ID verisine göre çok daha fazla yer kaplıyor olması bir dezavantaja sebep oluyor. Avantajları yada dezavantajları olsa da yerine göre GUID kullanmak zorunlu hale gelebiliyor ya da kullanılması daha mantıklı hale gelebiliyor.

Sebep ne olursa olsun GUID kullandığımızda karşımıza çıkan en büyük sorun işte bu dersimizin ana konusudur.

Advertisements

SQL Sıralı GUID Vermek – SQL NEWSEQUENTIALID

Bunun iki yolu var. Bu yollardan birisi C# kodları ile bir GUID üretmek… Bu yolu bu dersimde vermeyeceğim. Diğer yolumuz ise SQL üzerinden sıralı GUID verdirmek.

Normal şartlarda kolonun veri tipi uniqueidentifier olduğunda insert yapılırken boş gönderilse bile bir değer alıyor. Yada insert yapılırken

NEWID()

ile bir GUID oluşturup insert yapabiliyoruz. Ama bu şekilde her seferinde rastgele bir GUID oluşturulduğundan sıralı gitmiyor.

GUID ‘lerin sıralı gitmesi için

NEWSEQUENTIALID()

kullanılması gerekiyor.

Amaaa, ne yazık ki,

NEWSEQUENTIALID()

fonksiyonunu select ile yada bir insert esnasında kullanılamıyor. Kullanmaya çalıştığınızda ise

The newsequentialid() built-in function can only be used in a DEFAULT expression for a column of type ‘uniqueidentifier’ in a CREATE TABLE or ALTER TABLE statement. It cannot be combined with other operators to form a complex scalar expression.

Hatasını alıyoruz. Türkçe karşılığı ise şöyledir.

İlgili İçerik  SQL Stored Prodecure - Saklı Yordam

Newsequentialid() yerleşik işlevi, yalnızca bir CREATE TABLE veya ALTER TABLE ifadesinde ‘uniqueidentifier’ türünde bir sütun için DEFAULT ifadesinde kullanılabilir. Karmaşık bir skaler ifade oluşturmak için diğer operatörlerle birleştirilemez.

Bu durumda bu komutu sadece tablo oluşturulurken uniqueidentifier veri tipindeki bir kolonun default değeri olarak ayarlayabiliyoruz. Sadece bunu yaptığımızda GUID ‘ler sıralı olarak gidiyor.

SQL NEWSEQUENTIALID

Şimdi bu tabloya kayıt ekleyelim ve test edelim.

INSERT INTO [dbo].[TABLO]
            (
            [_KOLON]
			)
     VALUES
            (
			GETDATE()
			)

NOT: GUID dışarıdan gönderilmemelidir. Aksi takdirde yine rastgele gidecektir.

SQL Sıralı GUID Vermek

Görselde gördüğünüz gibi GUID’ler sıralı bir şekilde ilerlemektedir. Bu şekilde ilerleyen kayıtları ORDER BY ile sıralı bir şekilde alınabilmektedir. Rastgele giden GUID ‘lerde ORDER BY yapıldığında karma karışık gelmektedir.

NOT: NEWSEQUENTIALID, SQL 2017 ve sonrasında kullanılabilmektedir.


SQL Sıralı GUID Vermek – SQL NEWSEQUENTIALID, dersimizde buraya kadar dostlar. Diğer derslerimizde görüşmek üzere.

Microsoft SQL Server & T-SQL Eğitim Seti ders listesi için tıklayınız.

Bu dersimde, SQL Eğitim setimdeki 53. derstir. 🙂

Sağlıcakla ve Takipte Kalın. 😉

SQL Guid vs Sequential GUID - Performans Karşılaştırması
SQL Insert, Update, Delete Output