SQL Server’da Toplu Veri Güncelleme: Hatalı E-posta Adreslerini Güvenle Düzeltme
SQL Server’da Toplu Veri Güncelleme: Hatalı E-posta Adreslerini Güvenle Düzeltme
Bir veritabanındaki e-posta adreslerinin bir kısmının .com yerine .comm ile bittiğini veya alan adının yanlış yazıldığını düşünün. Her kayıt farklı bir kullanıcıya ait olsa da ortak hatayı SQL Server’da tek sorguyla düzeltebiliriz. Buradaki önemli adım, güncellemeden önce hangi satırların etkileneceğini ve yeni değerlerini görmektir.
Örneklerde dbo.Musteriler tablosu ve Eposta sütunu kullanılıyor. Bunları kendi tablo ve sütun adlarınıza uyarlayın.
1. Sonunda fazladan harf bulunan adresler: .comm → .com
Örneğin ali@ornek.comm adresini ali@ornek.com yapmak istiyoruz. Kullanıcı adları farklı olsa da tüm hatalı kayıtlar aynı alan adıyla bitiyor.
Önce eski ve yeni değerleri karşılaştırın
SELECT
Eposta AS EskiEposta,
LEFT(Eposta, LEN(Eposta) - 1) AS YeniEposta
FROM dbo.Musteriler
WHERE Eposta LIKE '%@ornek.comm';
LEFT(Eposta, LEN(Eposta) - 1) metnin son karakterini kaldırır. WHERE ise yalnızca ilgili alan adıyla biten kayıtları seçer. Ön izlemede beklenmeyen bir adres varsa güncellemeye geçmeden koşulu düzeltin.
Güncellemeyi başlatın
BEGIN TRAN;
UPDATE dbo.Musteriler
SET Eposta = LEFT(Eposta, LEN(Eposta) - 1)
WHERE Eposta LIKE '%@ornek.comm';
SELECT @@ROWCOUNT AS GuncellenenKayitSayisi;
@@ROWCOUNT, hemen öncesindeki UPDATE komutunun etkilediği satır sayısını gösterir. Bu değeri okumadan araya başka bir SQL komutu koymayın.
2. Alan adı yanlış yazılmışsa: ornek.com → ordek.com
Bu örnekte son harfi silmek işe yaramaz: ayse@ornek.com adresinin ayse@ordek.com olması gerekiyor. Hatalı alan adını doğru olanla değiştiririz.
Önce sonucu görün
SELECT
Eposta AS EskiEposta,
REPLACE(Eposta, '@ornek.com', '@ordek.com') AS YeniEposta
FROM dbo.Musteriler
WHERE Eposta LIKE '%@ornek.com';
Ardından güncelleyin
BEGIN TRAN;
UPDATE dbo.Musteriler
SET Eposta = REPLACE(Eposta, '@ornek.com', '@ordek.com')
WHERE Eposta LIKE '%@ornek.com';
SELECT @@ROWCOUNT AS GuncellenenKayitSayisi;
REPLACE yalnızca belirtilen metni değiştirir. @ işaretini de aranan metne eklemek, kullanıcı adındaki benzer kelimelere dokunmamak açısından yararlıdır. İkinci örneği birincinin açık transaction’ı varken çalıştırmayın; her düzeltmeyi ayrı bir işlem olarak tamamlayın.
3. Sonucu kontrol edin ve işlemi tamamlayın
Seçtiğiniz güncellemeden sonra, aynı SQL Server bağlantısında sonuçları kontrol edin. Örneğin ikinci senaryo için:
SELECT Eposta
FROM dbo.Musteriler
WHERE Eposta LIKE '%@ordek.com';
Sayı ve adresler doğruysa aynı sorgu penceresinde işlemi kalıcılaştırın:
COMMIT TRAN;
Bir hata gördüyseniz bunun yerine değişiklikleri geri alın:
ROLLBACK TRAN;
COMMIT TRAN ve ROLLBACK TRAN alternatif komutlardır; ikisini art arda çalıştırmayın. Transaction açıkken ilgili satırlar üzerinde kilitler tutulabilir. Kontrolünüzü tamamlar tamamlamaz işlemi sonuçlandırın. Ayrıca işlemden önce uygun bir yedeğinizin bulunduğundan emin olun.4. Hatalı kayıt kaldı mı?
İşlem bittikten sonra kendi senaryonuza uygun sorguyla kalan kayıtları sayın:
-- Fazladan m harfi bulunan adresler
SELECT COUNT(*) AS KalanHataliKayit
FROM dbo.Musteriler
WHERE Eposta LIKE '%@ornek.comm';
-- Yanlış alan adıyla kalan adresler
SELECT COUNT(*) AS KalanHataliKayit
FROM dbo.Musteriler
WHERE Eposta LIKE '%@ornek.com';
İlgili sorgu 0 döndürüyorsa hedeflediğiniz biçimde hatalı kayıt kalmamıştır. İkinci sorguyu yalnızca @ornek.com adreslerinin tamamının gerçekten yanlış olduğu senaryoda kullanın.
Uygularken dikkat edilecekler
- Güncellemeden önce
SELECTile eski ve yeni değerleri yan yana görün. WHEREkoşulunu sadece doğruladığınız kayıtları kapsayacak kadar dar tutun.@@ROWCOUNTdeğeriniUPDATEişleminden hemen sonra okuyun.LENsondaki boşlukları saymaz. Verinizde son boşluklar olabileceğini düşünüyorsanız birinci örneği önce bu kayıtlar üzerinde ayrıca test edin.
Toplu veri düzeltmenin akışı şudur: Önce gör → güncelle → sonucu kontrol et → işlemi tamamla.
Kaynaklar
Şaban ÇİÇEK
Bilgi Teknolojileri