SQL Server’da Upsert
Nasıl Yapılır: Insert ve Update İşlemlerinin Birleştirilmesi
Veritabanlarıyla çalışırken, mevcut olan veya olmayan kayıtları yönetmemiz gereken durumlarla sık sık karşılaşırız. İşte burada Upsert
kavramı devreye girer; bu kavram INSERT ve UPDATE işlemlerini sorunsuz bir şekilde birleştirmemizi sağlar. Bu blog yazısında, yaygın bir SQL Server sorununu ele alacak ve Upsert mantığını etkili bir şekilde uygulayan bir çözüm sunacağız.
Problem: İş Atamaları Yönetimi
Diyelim ki, her işin atandığı kişiyi ve mevcut aşamasını gösteren bir iş atamaları görünümünüz var. Amacınız, farklı aşamalardaki her personel için iş sayısını döndüren bir saklı prosedür oluşturmaktır.
İlk deneme, sayıları geçici bir tabloya eklemeyi içerir. Ancak, bir anahtar sorun; aynı işte birden fazla aşamaya sahip olan personel üyelerinin sonuç tablonuzda ayrı satırlar oluşturmasıdır. Bunun yerine, bir personel üyesinin mevcut bir satırını güncelleyen veya hiç yoksa yeni bir satır ekleyen bir yönteme ihtiyacınız var.
Başladığınız kodun basitleştirilmiş bir örneği şöyle:
DECLARE @ResultTable table
(
StaffName nvarchar(100),
Stage1Count int,
Stage2Count int
)
INSERT INTO @ResultTable (StaffName, Stage1Count)
SELECT StaffName, COUNT(*) FROM ViewJob
WHERE InStage1 = 1
GROUP BY StaffName
INSERT INTO @ResultTable (StaffName, Stage2Count)
SELECT StaffName, COUNT(*) FROM ViewJob
WHERE InStage2 = 1
GROUP BY StaffName
Bu parçacıkta, her iki aşamada da işi olan bir personel üyesi @ResultTable
içinde iki kez görünür ki bu da istenen bir sonuç değildir.
Çözüm: Upsert İşlemini Gerçekleştirmek
Bu sorunu çözmek için, @ResultTable
içindeki kayıtları hem ekleyecek hem de güncelleyecek bir Upsert yaklaşımını uygulamamız gerekiyor. İşte bunu nasıl yapacağınıza dair adım adım bir inceleme:
Adım 1: Sonuç Tablosunu Tüm Personel ile Başlatma
Öncelikle, tüm personel üyelerini sonuç tablonuza eklerken başlangıç sayıları sıfır olarak ayarlayın. Bu, her personel üyesinin tabloda temsil edildiğinden emin olmanızı sağlar.
INSERT INTO @ResultTable (StaffName, Stage1Count, Stage2Count)
SELECT StaffName, 0, 0 FROM ViewJob
GROUP BY StaffName
Adım 2: Aşama Sayılarını Güncelleme
Sonra, her aşama için sayıları güncellememiz gerekiyor. İşte görünümünüzden iş sayısına göre değerlerini ayarlamak için UPDATE
ifadesini kullanan SQL komutlarını uygulayın:
Aşama 1 Sayısını Güncelleme
UPDATE @ResultTable
SET Stage1Count = (
SELECT COUNT(*) FROM ViewJob
WHERE InStage1 = 1 AND @ResultTable.StaffName = StaffName
)
Aşama 2 Sayısını Güncelleme
UPDATE @ResultTable
SET Stage2Count = (
SELECT COUNT(*) FROM ViewJob
WHERE InStage2 = 1 AND @ResultTable.StaffName = StaffName
)
Sonuç
Bu adımları takip ederek, SQL Server’da karmaşık yinelemelere veya göstergelere başvurmadan etkili bir Upsert işlemi gerçekleştirmiş olursunuz. Bu yöntem, veritabanınızdaki her personel için farklı aşamalarda doğru iş sayısını kolayca yönetip güncellemenizi sağlar.
Son Düşünceler
Upsert metodolojisini kullanmak, SQL sorgularınızın verimliliğini artırmakla kalmaz, aynı zamanda veritabanı yönetimi çabalarınızı da basitleştirir. Personel atamalarının net bir şekilde gösterilmesi, veri analizi ve raporlama sonuçlarını büyük ölçüde iyileştirir.
Eğer SQL sorgularınızla ilgili herhangi bir sorunuz varsa veya daha fazla yardıma ihtiyaç duyuyorsanız, lütfen aşağıdaki yorumlarda bizimle iletişime geçin!