Neden Sql Server xact_abort açık olduğunda raıserror sonra yürütme devam ediyor mu?
Ben sadece TSQL bir sürpriz var. Eğer xact_abort açık olsaydı, bir şey arıyor gibi düşündüm
raiserror('Something bad happened', 16, 1);
saklı yordam (veya herhangi bir parti) yürütme keser.
Ama ADO.NET hata mesajı tam tersini kanıtladı. Özel durum iletisi raıserror hata iletisini iki, artı bundan sonra kırıldı sıradaki şeyi aldım.
Bu benim geçici çözüm zaten benim için bir alışkanlık olan), ama gerekli olması gerektiği gibi görünmüyor:
if @somethingBadHappened
begin;
raiserror('Something bad happened', 16, 1);
return;
end;
Doktorlar demek bu
SET XACT_ABORT ON olduğunda, eğer bir Transact-SQL ifadesi çalışma zamanı hata yaptıysam, tüm işlem sonlandırıldı ve geri alındı.
Bu açık bir hareket kullanarak anlamına mı geliyor?
CEVAP
Bu Tasarım gereğidirTM, benzer bir soru: SQL Server takımın yanıt Connect üzerinde görebilirsiniz
Görüşleriniz için teşekkür ederim. Tasarım, set XACT_ABORT seçeneği RAISERROR deyimi davranışlarını etkilemez. Görüşlerinizi SQL Server'ın gelecekteki bir sürüm için bu davranışı değiştirmek için dikkate alacağız.
Evet, bu yüksek bir önem derecesi RAISERROR
uman bazıları için bir sorun (16
) gibi bir bit SQL yürütme hatası gibi - değil.
Çözüm senin yapman gereken şey sadece ve açık bir hareket kullanarak, değiştirmek istediğiniz davranışı üzerinde herhangi bir etkisi yoktur.
Neden Visual Studio 2010 C sekmeleri v...
Nasıl ve neden Haskell monad çalışma D...
Düzenle ve Devam ediyor: "Değişik...
Could not load bağımlılıkları dosya ve...
Neden Javascript sadece IE Geliştirici...