oturum açın Bir MS SQL Server veritabanında bir satırı güncelleştirecek ve sonra bir geçmiş tabloya güncelleştirmeyi eklemek için saklı bir proc kullanacak bir kod uygulamak için istendi. Veritabanını kontrol etmediğimiz için bunu yapmak için saklanmış bir proc ekleyemiyoruz. Kaydedilen işlemlerde, güncellemeyi yapabileceğinizi ve daha sonra saklanan başka bir proc üzerinde çalışmayı çağırdığınızı biliyorum. Bunu bir SQL komutunu kullanarak kodda yapabilir miyim?Bir <a1> Ekle</ a1> ve sonra bir SQL komutu
cevap
Ya ikisini de aynı ifadede (ayrı komutları bir noktalı virgülle ayırın) çalıştırın veya bir işlem kullanın, böylece 2. başarısız olursa ilk ifadeyi geri alabilirsiniz.
Ayrıca sql tetikleyicileri de oluşturabilirsiniz.
o saklı bir yordam oluşturmak yapamıyorsanız, o neredeyse kesin bir Tetik – foxxtrot
Kitaplığınıza bağlı olarak, genellikle her iki sorgusu yalnızca bir Komut Dizesi içine, bir noktalı virgülle ayırarak ekleyebilirsiniz.
Teşekkür oluşturamaz, ben noktalı virgül çalışacağız VB.NET 2005 kullanarak ms sql var. – osp70
Yetersiz bilgi - hangi SQL sunucusu? Neden tarih tablosu var?
Tetikleyiciler bu tür bir şey yapacaktır. MySQL'in bin klasörü sizin için daha yararlı olabilir.
Veritabanını denetlemediğinizi söylüyorsunuz. Erişen kodu kontrol ediyor musunuz? Orada giriş ekleyin ve SQL sunucusundan tamamen uzak tutun.
Geçmiş tablo, öğelerin güncellemelerini göstermek için uygulama tarafından kullanılır. Kurtarma için sadece işlem kaydı değil. – osp70
Bunun için depolanmış bir probata gerçekten ihtiyacınız yok. Soru, tüm ekler üzerinde kontrol sahibi olup olmamanıza bağlı. Aslında, tüm eklere erişiminiz varsa, bir eki sadece veri tabanına ve tek bir gönderimde geçmişe eklenebilir. Bu, her ikisinin de 'başarı' nın gerçekleşmesi için tamamlanmasını sağlayacaktır. Ancak, bir işlem içinde sıralı tablolara erişirken, geçmişe ait veri tabanını kilitlemediğinizden emin olmanız gerekir, aksi takdirde bir kilitlenme durumu olabilir. Ancak, ekler üzerinde denetiminiz yoksa, değiştirilmiş, eklenmiş veya silinmiş verilere erişmenizi sağlayacak belirli db sistemlerine bir tetikleyici ekleyebilirsiniz. Eklediğiniz, güncellediği veya sildiği gibi, ihtiyacınız olan tüm verileri size verebilir veya vermeyebilir, ancak neyin değiştiğini size söyleyecektir.
Cevabınız için teşekkür ederiz, aşağıda yaptığım şeylerin bir özetidir. Şimdi, trans başarısızlık durumunda geri dönüp dönmediğini görmek için sınamak için.
sSQL = "BEGIN TRANSACTION;" & _
" Update table set col1 = @col1, col2 = @col2" & _
" where col3 = @col3 and " & _
" EXECUTE addcontacthistoryentry @parm1, @parm2, @parm3, @parm4, @parm5, @parm6; " & _
"COMMIT TRANSACTION;"
Yep, depolanmış proc'yu test ortamımda kaldırdı ve sql bir hata attığında, bilgi başlangıçta olduğu gibi güncellenmiş olması gerekir. Herkese teşekkürler! – osp70
Bu, beni doğru yolu gösterdiği için kabul ettiğinizi gösterdi. Teşekkürler. – osp70