Osman KURT

Yazılım Uzmanı | MVC Eğitmeni

MSSQL Üzerinde Sayfalama İşlemi

Merhabalar,

MSSQL 2008 ve MSSQL 2012 de sayfalama işleri nasıl yapılır.

MSSQL 2008

Declare @pageNumber INT=2;
Declare @totalPage INT=3;

WITH PageList AS
(
SELECT ROW_NUMBER() OVER(ORDER BY ID) AS LineNo, m. * FROM Pages as m
)

SELECT *
FROM PageList
WHERE LineNo BETWEEN (@pageNo - 1) * @totalPage + 1
AND @pageNo * @totalPage

MSSQL 2012

Yukarıdaki ROW_NUMBER() performansımdan ve daha kolay kullanım sağlamak için yeni geliştirmeler bulunmaktadır.

SELECT * FROM Pages
ORDER BY ID ASC
OFFSET 200 ROWS
FETCH NEXT 220 ROWS ONLY

Osman KURT
Yazılım Uzmanı

Entity Framework İncelikleri

Merhaba arkadaşlar,

Entity framework kullanan bir çok arkadaş belki karşılaşmıştır. Bazı tablolar var ki ne yaparsanız yapın bir türlü entity model içine dahil edemezsiniz.

Geçen günlerde benim de başıma geldiği için yazma gereği duydum. Arkadaşlar eğer bir tablo entity model içine dahil edilemiyorsa bunun ilk sebebi tablonun bir primary key alana sahip olmamasıdır. Dİyebilirsiniz ki her tablo zaten dahildir. Ben şahidim değil :) olmadığı durumları da gördü bu gözler.

Eee Osman efendi bunun çözümü nedir diye soracaksınız. Basit arkadaşlar PK yoksa bile PK olarak kullanabilecek bir alan için nulleble alanını null geçilemez olarak ayarlamak gerekir. Eğer gerekli ayarlamayı yaparsak Entity bu alanı readonly olarak key atayacak ve tabloyu modelinize dahil edecek. Siz de istediğiniz gibi kullanabilirsiniz.

Kolay gelsin,

Osman KURT
Yazılım Uzmanı C# Uzmanı

MsSql Joinli Sorguda Update İşlemi

Merhabalar,

Sql'de update işlemi basit fakat bunu aynı anda birden çok tabloda yapmak bazı arkadaşlar için sıkıntı olabiliyor. Basit ama kullanışlı bir paylaşım olacaktır diye yazıyorum bu gönderiyi. Gerçekten ihtiyaç duyulabiliyor. Join işlemine eminim ki birçok arkadaşımız zaten hakimdir. Şimdi alt kısımda asıl paylaşımı veriyorum.

 
UPDATE f
SET    f.AnketID = a.AnketID
FROM   Firma AS f
       INNER JOIN Anketler AS a
       ON  a.FirmaID = f.FirmaID
WHERE  f.AnketID IS NULL

Kodumuz bu kadar arkadaşlar, umarım işinizi kolaylaştırmıştır.

Osman KURT
C# Yazılım Uzmanı

Sql de While Döngüsünün Kullanımı

.Net programlamada kullandığımız gibi birçok olayı SQL üzerinde de gerçekleştirebiliriz. Bunlardan bir tanesi de while döngüsü. SQL üzerinde birçok yazılımcı arkadaşın eksik olduğu aşikar. Bu durumu bir nebze olsun aza indirgemek için SQL konusun da birkaç yazı paylaşmaya karar verdim.

Örneğimiz kısaca 1'den 100'e kadar olan rakamları sırayla ekrana basmak olacak. Basit bir örnek ama anlamak için birebir.


 
DECLARE @Number INT = 0;
WHILE 
@Number < 100 BEGIN PRINT @Number;
SET @Number += 1;
END;
GO

Görüldüğü üzere şartı sağlayana kadar bir döngümüz var ve her seferinde print ile ekrana basıyoruz. Şart sağlandığı anda da döngümüz sonlanıyor.

Görüşmek üzere,
Osman KURT

Yazılım Geliştirme Uzmanı

MSSql Bugüne Ait Verileri Çekme

Mssql de tarih işlemleri benim için her zaman sıkıntılı olan işlemler olmuştur. Sql konusunda eminim ki birçok arkadaşımız da bu sıkıntıları yaşıyor. Bu yazım da sizlere ufak ama çok sıkça kullanılacak bir kod parçası vereceğim.

Farz edelimki başlama tarihi olan bir tablomuz olsun ve bizde başlama tarihi bugüne ait olan verileri çekelim. Bu arada alanımızın veri tipi datetime.

Sorgumuz,

Select * from Firmalar where CONVERT(NVARCHAR,BaslamaTarihi,104) = CONVERT(NVARCHAR,GETDATE(),104) 

Görüşmek üzere,

Osman KURT
Yazılım Uzmanı & MVC Eğitmeni

*Sorulan bir soru üzerine yapılmış bir paylaşımdır.

Entity Framework Çoklu Orderby Kullanımı

Entity framework kullanırken işimize en çok yarayacak sorgulardan biride Select yaparken Order çekmek.
Normal kullanımda tek yazacağımız zaman;

var Detay = (from a in entity.KonsolLog orderby a.KonsolLogID descending select a).ToList();

Çoklu kullanımı ise;

var Detay = (from a in entity.KonsolLog select a).OrderByDescending(m => m.KonsolLogID).ThenBy(m => m.Tarih).ToList();

 

Görüşmek üzere

Osman KURT
Yazılım Uzmanı

Entity Framework İstenilen Türde Liste Döndürme

Son projelerimde sıkça kullanmakta olduğum entity framework’ de yeni yeni şeyler öğrendim ve bunlardan birini sizler için paylaşmak istedim.
DB’den çektiğimiz bir veriyi liste olarak almak için var bir değişken tanımlıyoruz ve entity cümlemizi yazarak db’den gelen listeyi değişkenimize aktarıyoruz. Daha sonra forech döngüsü ile kullanmak istediğimiz formata getiriyoruz kendi listemize dolduruyoruz.


Örnek Kullanım;

List<Konsol> konsollist = new List<Konsol>();
var Detay = (from a in entity.KonsolLog orderby a.KonsolLogID descending select a).ToList();
foreach (var item in Detay)
{
konsollist.Add(new Konsol { KonsolLogID = item.KonsolLogID, Icerik = item.Icerik });
}
return konsollist;


Şimdi bu olayımızda yapılan 2 ana işlem var. Öncelikte Db’ye bağlanarak çektiğimiz verileri değişkene aktarıyoruz . İkinci olarak çektiğimiz bütün veri sayısı kadar tek tek dolaşarak yeniden listeye ekleme yaptırıyoruz. Buda verinin boyutuna göre hatrısayılır bir zaman alıyor ve kod israfı yaratıyor. Programcılar arasında kod ameleliği. Gelin yeni öğreneceğimiz sistem üzerinde bu kodun daha kolay kullanımı nasıl oluyor hep birlikte görelim.

Örnek kodumuzun kolay kullanımı alt kısımda ki gibi;

var konsollist = (from a in entity.KonsolLog orderby a.KonsolLogID descending select new Konsol { KonsolLogID = a. KonsolLogID, Icerik = a. Icerik }).ToList();
return konsollist;


Görmüş olduğunuz gibi yeni uygulanan kod ile tek seferde işlemi tamamlıyoruz. Emin olun büyük ölçekli projlerde bu konu sizinde canınızı yakabilir.



Görüşmek üzere
Osman KURT
Yazılım Uzmanı

SQL de İki Tabloyu Birbiriyle Merge'leme

Bu yazımda size elinize bulunan 2 tabloyu birbiyle mergeleme (birleştirme) olayından bahsedeceğim. Yalnız aynı olan verileri almamak şartıyla. Örneğin elinizde bir mail listeniz var ve bu mail listenize yeni veriler eklemek istiyorsunuz. Ama var olan listenizde yeni eklenecek olan maillerden var mı bilmek istiyorsunuz ve aynı verileri gereksiz yere saklamak istemiyorsunuz. İşte tamda burada merge olayı devrey giriyor çünkü tek tek kontrol etmeye kalkarsanız ve dolu bir veri listeniz varsa gerçekten bu çile haline gelebilir.

Sql de merge olayı kasıyormu?

Kısa söylemek gerekirse HAYIR. Insert yada update zamanından fazla bir zaman almıyor.

Kullanımı;

İlk olarak ben liste halindeki verilerimi bir adet DataTable'e yazdım. Daha sonra önüne "#" koyarak oluşturduğum temp tabloma DataTablemi kayıt ettiim. Bu arada # işareti koyarak sql'de oluşturduğum temp tablom connection close olduğu anda kendiliğinden kayboluyor haberiniz olsun. Daha sonra merge olayımız devreye giriyor. İstediğimiz koşuluda yazabiliyoruz aynı zamanda.

Benim temp tablomun adı A, asıl kayıt atacağım tablom da MailListesi olsun ve kodumuz alt kısım da mevcut,

 

MERGE MailListesi cm 
USING A ON cm.FirmaID = A.FirmaID and cm.Mail = A.Mail
WHEN NOT MATCHED THEN
       INSERT (FirmaID,Mail)
       VALUES (A.FirmaID,A.Mail);

 

Kısa zaman sonra ufak bir örnek uygulamayıda buaradan paylaşacağım.

Görüşmek üzere

Osman KURT
Yazılım Uzmanı

SQL Server da Log Dosyasını Temizlemek

Kimi zaman sql performansımız düşer bunun nedenini bilemezsiniz ama neden bellidir. Site trafiğinden dolayı sql log dısyaları inanılmaz bir şekilde şişer ve önce sql i sonra server'ı yormaya başlar. İşte bunu engellemek için belli zamanlar da log dosyalarını temizlemek gerekir. Bu çok basit bir olay ama unutmayın ki her zaman bu işlemden önce bir adet backup dosyamızı alalım ve datbase mizi yedekleyelim.

Şimdi vereceğim kodu new query diyerek sql de çalıştırın ve log dosyanızın boyutunu kontrol edin. Ben denedim 505 MB lık log dosyam 1MB ta düştü ve performans artışı sağlandı.

dump tran databaseninadınıyaz WITH TRUNCATE_ONLY
DBCC SHRINKFILE(2,EMPTYFILE)

Ve Bu kadar sorguyu execute ettiğinzde log dosyanız artık yeni gibi :D

Görüşmek Üzere;

Osman KURT

Yazılım Geliştirici ve Grafiker