Anasayfa / Yazılım / SQL / Truncate Kullanımı

Truncate Kullanımı

MS SQL’de tablo içinde yer alan satırları hızlı bir şekilde silmek için TRUNCATE deyimi kullanılır. Bu şekilde tablolar üzerinde rahatlıkla silme işlemi yapılabilir. Tabi bunun yapılabilmesi için önemli bir şart mevcut. MS SQL ortamında veritabanı için tanımlanan roller dbo veya db_ddladmin admin olmalı ya da serverda sysadmin rolüne sahip olunmalıdır. Söz dizimi olarak kullanımı aşağıdaki gibidir:

TRUNCATE TABLE tabloAdı

Şimdi örnekleme yapalım. AdventureWorks2012 veritabanı üzerinde çalışalım. Bunun için bi kaç tablo oluşturalım. Bu kodları direkt veriyorum.

IF EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[demoProduct]')
AND type in (N'U'))
DROP TABLE [dbo].[demoProduct];
GO
SELECT * INTO dbo.demoProduct FROM Production.Product;
IF EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[demoCustomer]')
AND type in (N'U'))
DROP TABLE [dbo].[demoCustomer];
GO
SELECT * INTO dbo.demoCustomer FROM Sales.Customer;
IF EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[demoAddress]')
AND type in (N'U'))
DROP TABLE [dbo].[demoAddress];
GO
SELECT * INTO dbo.demoAddress FROM Person.Address;
IF EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[demoSalesOrderHeader]')
AND type in (N'U'))
DROP TABLE [dbo].[demoSalesOrderHeader];
GO
SELECT * INTO dbo.demoSalesOrderHeader FROM Sales.SalesOrderHeader;
IF EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[demoSalesOrderDetail]')
AND type in (N'U'))
DROP TABLE [dbo].[demoSalesOrderDetail];
GO
SELECT * INTO dbo.demoSalesOrderDetail FROM Sales.SalesOrderDetail;

Şimdi sileceğimiz dbo.demoSalesOrderHeader tablosunu bi listeleyelim öncelikle;

SELECT SalesOrderID, OrderDate FROM dbo.demoSalesOrderHeader;

2013042901

Görüleceği üzere listeleniyor. Şimdi silelim.

TRUNCATE TABLE dbo.demoSalesOrderHeader;

Bunun sonucunda işlem gerçekleşiyor ve aşağıdaki mesajı alıyoruz.

Command(s) completed successfully.

Şimdi tekrar listeleyelim bakalım, görebiliyor muyuz?

SELECT SalesOrderID, OrderDate FROM dbo.demoSalesOrderHeader;

2013042902

Görüleceği üzere 0 satır veri geri döndü, yani tablo içeriği tamamen silindi. Görüleceği üzere DELETE işleminden daha güçlü bir fonksiyon. Ama TRUNCATE ile DELETE işlemlerinde olduğu gibi filtreleme yaparak yani WHERE deyimini kullanarak silme işlemini yapabilme şansımız yok. Yani aslında tablomuz mevcudiyetini korusun ama içeriğini komple boşaltalım diyorsak TRUNCATE deyimini kullanabiliriz.

Burada konumuzla alakalı değil ama hep aklınızda bulunsun, veri silme işlemlerini yaparken, bu komutları yazarken çok ama çok dikkatli olmamız gerekir. Reel projelerimizde hatalı silme işlemleri sonucu başımız çok fazla ağrıyabilir, dikkat edelim, duymayanları uyaralım 🙂

Bir cevap yazın

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