SQL Server’da OUTPUT ile Kayıt Taşıma

transact-sql

Veritabanı üzerinde işlem yaparken tablolar üzerinde artık önemini kaybeden ve günlük operasyonlarda yavaşlamamıza sebep olan veriler olabiliyor. Bunları belirli aralıklar ile siliyor ya da gerekli olabileceğini düşünüyorsak mevcut tablodaki kayıtları benzer şemada bir Historical tablo oluşturarak burada arşivleyebiliyoruz.

Burada herkesin bildiği en klasik yöntem INSERT – DELETE diyebiliriz. Yani bir tablodan kayıtları öncelikle arşivleyeceğimiz tabloya taşıyoruz ve bu işlemden sonra aktarılan kayıtları kaynak tablodan siliyoruz.

SQL Server üzerinde ise OUTPUT komutu ile bu taşıma işlemini tek hamlede nasıl yapabilirsiniz ondan bahsedeceğim

İlk olarak örnek tablomuzu oluşturup kayıtlarımızı ekleyelim

CREATE TABLE dbo.Person (ID INT IDENTITY(1,1), FirstName VARCHAR(50), CreateDate DATETIME)
GO
INSERT INTO dbo.Person (FirstName, CreateDate)
SELECT ‘Daniel’,’2017-01-10′
GO
INSERT INTO dbo.Person (FirstName, CreateDate)
SELECT ‘Mike’,’2016-05-20′
GO
INSERT INTO dbo.Person (FirstName, CreateDate)
SELECT ‘Conner’,’2018-10-11′
GO
INSERT INTO dbo.Person (FirstName, CreateDate)
SELECT ‘Jack’,’2018-09-05′
GO
INSERT INTO dbo.Person (FirstName, CreateDate)
SELECT ‘Simon’,’2018-07-12′

Tablomuza göz atalım

SELECT * FROM dbo.Person

Verileri taşıyacağımız yeni tablomuzu oluşturalım ve buna DeleteDate adında silinme tarihlerini yazacağımız bir alan daha ekleyelim.

CREATE TABLE dbo.Person_History (ID INT, FirstName VARCHAR(50), CreateDate DATETIME, DeleteDate DATETIME)

CreateDate 2018’den küçük kayıtlarımızı silinme tarihlerini GETDATE() vererek OUTPUT komutu ile yeni tablomuza taşıyalım.

DELETE FROM dbo.Person
OUTPUT
DELETED.ID,
DELETED.FirstName,
DELETED.CreateDate,
GETDATE() AS DeleteDate
INTO dbo.Person_History
WHERE YEAR(CreateDate) < 2018

Tablolarımızı tekrar kontrol edelim

Resim-1

Burada önemli iki nokta var.

  1. DELETED SQL Server’ın bize sunduğu bir Alias Identifier’dır.
  2. INTO komutu alıştığınız kullanımın aksine tabloyu kendi oluşturmaz. Mevcut olan bir tabloya ihtiyaç duyar.

Bu makalemiz de OUTPUT parametresini DELETED için tablomuzdaki gereksiz dataları taşımak için kullandık. Fakat, bunun yanında UPDATE, INSERT ve MERGE işlemleri için de farklı şekillerde kullanabilirsiniz.

Bu konuyla ilgili sorularınızı  alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.

Referanslar

www.mshowto.org

TAGs:sql delete, OUTPUT, SQL Server, t-sql, Sql insert, SQL komutları, T-SQL nedir,SQL Server’da OUTPUT ile Kayıt Taşıma

Yazı gezinmesi

Mobil sürümden çık