Sunucudan sunucuya uzak saklı yordamlar hatalarını işleme

Çalıştırdığınızda uzak saklı yordamlar ve toplu işlemleri yerel bilgisayardan örnek , SQL Server bir istemciye deyim ve toplu iş iptal hataları yaşayabilir:

  • Bir deyim durdurma hatası oluştuğunda, hataya neden olan deyim, yürütülmesi sonlandırılır uzak saklı yordam veya toplu işlem devam eder.

  • Toplu iş iptal hatası oluştuğunda, tam Uzak saklı yordam veya toplu iş yürütme sonlandırır.

  • Ne zaman uzak saklı yordamlar ve toplu işlemleri içinde çalıştırılır kapsam bir try bloğu tarafından try… toplu iş iptal hataları işlenebilircatch yapı.

Uzak saklı yordamlar ve toplu işlemleri deyim ve toplu iş iptal hataları kaynaklanan davranışını yerel sunucunun set xact_abort ayarına bağlıdır.

set xact_abort iş off

set xact_abort off yerel sunucu, uzak saklı yordam deyim iptal hataları, deyim iptal hataları olarak yerel sunucuya yayılır istemci.Hataya neden olan deyim sonlandırıldı.istemci, karşılık gelen deyim iptal hataları için hata iletileri alır.Ayrıca, uzak saklı yordam tamamlanıncaya kadar çalışıyorsa, @@ error 0 değerini döndürür.Bir try kapsam içinde hata oluşup blok, yürütme devam eder ve catch blok hatırlatılır.

Toplu iş iptal hataları uzak saklı yordam, istemci yerel sunucu tarafından yayılır.Uzak saklı yordam olarak adlandırılan execute deyim sona erer, ancak toplu iş veya execute deyim içeren saklı yordam çalışmaya devam eder.Bu nedenle, @@ error karşılık gelen hata kodu uzak saklı yordam sona hata verir ve depolanmış yordamın dönüş değeri null olur.uzak saklı yordam , Oluşturan bir hata yerel sunucuda bir try bloğunun kapsam içinde yürütülür, hata kontrolünün catch bloğu son hata hakkında bilgi için uzak sunucuda geçmesine neden olur.

Hatalarını giderirken, bir uzak saklı yordam try içinde yürütmek blok , bir try…catch yapı.Uzak saklı yordam başarıyla tamamlanmazsa, yürütme için ilişkili catch atlar blok yerel sunucuda uzak sunucuda son hata hakkında bilgi.Uzak saklı yordam başarıyla tamamlanırsa, try içinde yürütülmeye blok yerel ve uzak saklı yordam döndürme değeri üzerinde kullanılabilir.

Alternatif olarak, bir try kapsam dışında uzak bir saklı yordam yürütülürken blok, @@ uzaktan yordam tamamlanmış olup olmadığını belirlemek için hata uzak saklı yordam sonunda inceleyin.@@ error 0 ise uzak saklı yordam başarıyla yürütüldü ve saklı yordamın dönüş değeri kullanılabilir.@@ error sıfır değilse, uzak saklı yordam başarıyla tamamlandı ve dönüş değeri bir saklı yordam kullanılamaz.

set xact_abort açıktır

set xact_abort on yerel sunucuyu, ayarı bağlantılı sunucu yayılır.Toplu iş iptal hataları yerel sunucudaki tüm deyim ve toplu iş iptal hataları uzak saklı yordam dönüştürülür.Bu nedenle, toplu iş veya uzak saklı yordam olarak adlandırılan saklı yordamı yürütme uzak saklı yordam ile birlikte sona erdirilir.uzak saklı yordam , Oluşturan bir hata yerel sunucuda bir try bloğunun kapsam içinde yürütülür, hata kontrolünün catch bloğu son hata hakkında bilgi için uzak sunucuda geçmesine neden olur.

try bloğunun kapsam dışında uzak bir saklı yordam çalıştırıldığında, @@ toplu hatası nedeniyle oluştuğunu belirlemek için hata değerini incelemek olamaz deyim yürütmek sonrasında deyim yürütün.Bu nedenle, gereken yürütmek uzak saklı yordam bir try… try bloğu içindecatch yapı.Uzak saklı yordam başarıyla tamamlanmazsa, yürütme için ilişkili catch atlar blok yerel sunucuda uzak sunucuda son hata hakkında bilgi.Uzak saklı yordam başarıyla tamamlarsa, try içinde yürütülmeye blok yerel ve uzak saklı yordam döndürme değeri üzerinde kullanılabilir.

RAISERROR ve try…CATCH

Uzak saklı yordam içindeki 20 olan düşük önem derecesine sahip RAISERROR arayan uzak sunucuda bir deyim durdurma hatası neden olur.BİR TRY…catch uzak toplu iş iptal hataları yalnızca yerel sunucuyu tutamaçları oluşturun.20'den düşük önem derecesine sahip RAISERROR uzak bir saklı yordam çağrıları ve uzak saklı yordam bir try kapsamına blok yerel sunucuda RAISERROR catch için geçirmek denetimi neden blok , try…catch yapı.Ancak, 20 veya uzak sunucuda büyük önem derecesi bir RAISERROR bağlantıyı keser ve yerel sunucuda yürütme için catch geçirmeden blok.