Son Haberler
Anasayfa / Yazılım / SQL / ROWCOUNT Kullanımı

ROWCOUNT Kullanımı

Bir T-SQL deyimi çalıştırdığımızda ya da bir SQL’de kod oluşturduktan sonra ilgili kod bloğunu çalıştırdığımızda, yani veri güncelleme, veri silme, veri ekleme gibi işlemleri yaptıktan sonra bize bir takım bilgiler geri döner. İşte 100 satır etkilenmiştir gibi. Yani 100 row(s) affected gibi bilgiler geri döner. İşte biz bu ROWCOUNT bilgisini düzenleyebiliyoruz. Nasıl mı diyleim ki bir kod yazdınız ve bu kod sonucunda normalde 145 satır ekleniyor olsun. Biz ROWCOUNT ile her 50 satırda bir bize bilgilendirme yapmasını isteyebiliriz, yani tek seferde 145 satıra dair bir bilgi geri dönüşü olmayacak 50 satır etkilendi şeklinde 2 dönüş ve sonra 45 satır etkilendi şeklinde tek bir dönüş olacak.

Bu tabi ilgili sorgum çalıştığı müddetçe geçerli olan bir durum. Yani sürekli olarak bundan sonraki her SQL sorgusu bu şekilde olacak değil. Peki bunu niye kullanırız, özellikle SQL’de T-SQL komutları yazılırken WHILE döngüsü kullandığımızda milyonlarca satır veri üzerinde işlem yaptırmamız gerekebilir, işte bu işlemi kısım kısım parça parça yapabilmek için ROWCOUNT kullanırız.

Kullanımı aşağıdaki gibidir:

SET ROWCOUNT
SET ROWCOUNT 0

ROWCOUNT’u kapatmak için SET komutu ile birlikte değerini 0 yaparız. Şimdi aşağıdaki kod bloğunu boş bir query sayfasında çalıştıralım. AdventureWorks2012 veri tabanı üzerinde işlem yapıyorum.

IF EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'dbo.demoSalesOrderDetail')
AND type in (N'U'))
DROP TABLE dbo.demoSalesOrderDetail;
GO
CREATE TABLE dbo.demoSalesOrderDetail(SalesOrderID INT NOT NULL,
SalesOrderDetailID INT NOT NULL, Processed BIT NOT NULL);
GO
SET ROWCOUNT 0;
INSERT INTO dbo.demoSalesOrderDetail(SalesOrderID,SalesOrderDetailID,Processed)
SELECT SalesOrderID, SalesOrderDetailID, 0
FROM Sales.SalesOrderDetail;
PRINT 'Tablo güncellemesi gerçekleştirildi!';
SET ROWCOUNT 30000;
WHILE EXISTS(SELECT * From dbo.demoSalesOrderDetail WHERE Processed = 0) BEGIN
UPDATE dbo.demoSalesOrderDetail SET Processed = 1
WHERE Processed = 0;
PRINT '30000 satır veri güncellendi.';
END;
PRINT 'İşlem tamamen bitmiştir!';

Öncelikle komutumda veritabanım üzerinde eğer varsa demoSalesOrderDetail tablosunu siliyorum. Daha sonradan bu tablodan tekrar oluşturuyorum, çünkü mevcut orjinal tablo üzerinde işlem yapmak istemiyorum. Daha sonra ROWCOUNT değerimi 0 yapıyorum. İlk aşamada herhangi bir sınırlama yapmadım yani. Dolayısı ile ne kadar veri işlendi ise o kadar bilgiyi görebilirim. Daha sonra ROWCOUNT 30000 diyorum. Bu seferde UPDATE işlemi yapıyorum. İlk anda dönecek veri bilgisi bu sefer 30000’de bir tekrarlanacak. Sonuç olarak aşağıdaki gibi bir sonuç alıyorum.

2013091001

Bir sonraki yazıda görüşmek üzere..

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir