2010-05-12 11 views
5

Sadece bir kayıt eklendiğinde veya güncellendiğinde otomatik olarak benim için bir "ModifyDate" sütununa sahip olmak istiyorum.SQL Server 2005 - ModifyDate sütunu - Bir Hesaplanmış Sütun kullanarak bunu uygulamak için doğru bir yol var mı?

Tetikleyiciler kullanmalı mıyım yoksa Bir Hesaplanmış Sütun kullanmak uygun mu? (SSMS2005 ve SQL Server 2005 Express kullanarak)

+2

bir hesaplanan sütun olacak ** değil ** çalışır. Hesaplanan bir sütunun değerini GETDATE() olarak ayarlarsanız, son güncellemeyi değil, her zaman * geçerli * tarihini döndürür. – egrunin

+0

Vay Bilgisayarı Seçilmiş Sütun seçiminde yeniden hesapladığını fark etmemiştim. Teşekkürler! –

+1

Hesaplanan değer devam ederse ne olur? –

cevap

5

INSERTed kısmı kolaydır - sadece o sütunda bir varsayılan değer tanımlayın ve yeni bir satır eklediğinizde, bu sütun için bir değer belirtmeyin.

UPDATE bölümü daha zorlayıcıdır - bir trigger that fires ON UPDATE yazmanız ve sonra bu sütunu güncelleştirmeniz gerekir. Bunu SQL Server'da yapmak için başka bir yol olduğunu düşünmüyorum.

Soru: Gerçek takvim tarihine gerçekten ihtiyacınız var mı? Değilse, sadece bir satırın değişip değişmediğine dair bir "işaretçiye" sahip olmak istiyorsanız, bunun yerine ROWVERSION column type (eski adıyla TIMESTAMP) 'a bakın.

Bunun için hesaplanmış bir sütunu nasıl kullanabileceğinizi gerçekten göremiyorum - bu tarihi bir yerde saklamanız ve INSERT ve sonraki her UPDATE ile güncel tutmanız gerekir; bunu yapmak yalnızca bir tetikleyici tarafından yönetilir.

2

Sana varsayılan kısıtlama yerine hesaplanan sütun anlamına varsayın.

Eğer öyleyse, sorun değil. Bunu böyle yapmayı tercih ederim. Bir olası dezavantaj, bir istemcinin varsayılan değeri geçersiz kılabileceğidir, ancak istemciye güvenmiyorsanız, depolanmış yordamlarda tablo erişimini de tamamlayabilirsiniz.

Tetikleyiciler de işe yarayacak, ancak tetikleyiciler fazladan karmaşıklık oluşturma eğilimindedir. Tetikleyicileri içeren kodlama hataları, orada en zor veritabanı sorunları arasındadır.

+2

Bir satır güncellendiğinde varsayılanın yardımı yok .... ilk INSERT gerçekleştiğinde sadece "ateş" ediyorlar .... –

3

Tetikleyiciden uzak durmanızı ve Tarih değiştirilmiş sütununu sunucu getDate işlevini kullanarak saklı bir yordamla ayarlamanızı öneririm.

Örnek:

Güncelleme Müşteriler Ad = 'Jim' Set, Soyadı = 'Jones', DateModified = getDate()

İlgili konular