Modelleme ve veri değişimi
UPDATE, hedef kontrolü ve OUTPUT
Değiştirmeden önce etkilenecek satırları gör.
Kavramı anlayalım
UPDATE var olan satırları değiştirir. WHERE yoksa tüm satırlar hedef olur. Önce aynı koşulla SELECT yap, beklenen satır sayısını belirle ve işlem sonrası @@ROWCOUNT/OUTPUT ile kontrol et. OUTPUT deleted ve inserted görüntülerini gösterebilir.
JOIN ile yapılan UPDATE’de her hedef için tek kaynak satırı olmalıdır; birden fazla kaynak eşleşmesine dayanmak belirsiz sonuç doğurabilir. Para veya stok gibi eşzamanlı alanlarda okuma ile yazma arasındaki yarışı ayrıca tasarla. Bu örneklerde değişiklik geri alınır.
Gerçek uygulamada stok kontrolüyle azaltmayı aynı koşullu UPDATE içinde yapmak yarış aralığını azaltır. Etkilenen satır sıfırsa stok yetersizliği veya kayıt yokluğu iş mantığında açıklanmalıdır.
Kontrollü veri düzeltme ve iş durumunu değiştirme için.
WHERE’i unutmak ya da ön kontrol sorgusunu farklı koşulla çalıştırmak.
Aynı konu. Üç farklı derinlik.
SELECT ProductId, Stock FROM lab.Product WHERE ProductId = 2;Mouse’un mevcut stoğu 40’tır.
Bu sayfa SQL çalıştırmaz. Örnekleri indirilebilir SqlStudioLab veritabanında, SSMS’de uygula. Geçici tablo örneklerini yeniden çalıştırırken yalnız ilgili #tabloyu temizle. VIEW, procedure ve function örnekleri lab’da kalıcı nesne oluşturur; üretim bağlantısı kullanma.
Önce kendin dene.
Mouse stok değişikliğini transaction içinde dene ve geri al.
Çözümü ve açıklamasını göster
IF DB_NAME() <> N'SqlStudioLab' THROW 50001, 'Lab only.', 1; BEGIN TRANSACTION; UPDATE lab.Product SET Stock = Stock + 5 WHERE ProductId = 2; SELECT Stock FROM lab.Product WHERE ProductId = 2; ROLLBACK;Transaction içinde 45, geri alma sonrası 40 olmalıdır.