Aracılığıyla paylaş


Server-sunucuya uzaktan Saklý Yordamlarý hatalar işleme

Uzak saklı yordamlar ve toplu işlem yerel bir örneğinden çalıştırdığınızda SQL Server bir istemci için deyim ve toplu iş iptal hatası karşılaşabilir:

  • Bir deyimi iptal ettiğinizde hatası oluşuyor, hataya neden olan bir deyim sonlandırılır, ancak uzak saklı yordam veya toplu iş yürütme devam eder.

  • Bir toplu iş iptal hatası ortaya çıktığında, tam bir uzak saklı yordam veya toplu iş yürütme sona erdirir.

  • Uzaktan saklı yordamları ve toplu işlemler bir TRY kapsam içinde yürütülür blok, işlenen toplu iş iptal hatası olarak TRY…CATCH yapýsý.

Uzak saklı yordamlar ve toplu işlemleri deyim ve toplu iş iptal hatası kaynaklanan davranışını yerel sunucunun küme XACT_ABORT ayarına bağlıdır.

küme XACT_ABORT mı KAPALı

küme XACT_ABORT yerel sunucu KAPALı ise, istemci yerel sunucu tarafından uzak saklı yordam içindeki herhangi bir deyim iptal hata bildirimi durdurma hataları olarak yayılır.Hataya neden deyim sona erdirildi.Istemci bildirimi durdurma hataları için karşılık gelen hata iletileri alır.Ayrıca, uzak saklı yordam bunu tamamlanıncaya kadar çalışırsa, @@ ERROR 0 değerini döndürür.Hata bir TRY bloğuna kapsamında oluşup oluşmayacağını, yürütme devam eder ve CATCH blok değil çağrılır.

Toplu iş iptal hataları uzak saklı yordam, istemci yerel sunucu tarafından yayılır.Uzak saklı yordam adı verilen yürütmek deyim sona erdirir, ancak toplu iş veya yürütmek deyim içeriyordu, saklı yordam çalışmaya devam eder.Bu nedenle, @@ ERROR uzak saklı yordam sonlandırıldı hata karşılık gelen hata kodunu döndürür ve depolanmış yordamın dönüş değeri NULL olur.Yerel sunucuda TRY bloğunun kapsam içinde bir hata üretir uzak saklı yordam çalıştırıldığında, hata denetimi, CATCH blok son hata hakkında bilgi için uzak sunucuda geçirmek neden olur.

Hatalarında sorun giderme, bir uzak saklı yordam içindeki bir TRY…CATCH yapýsý TRY bloğuna yürütün.uzak saklı yordam Olan başarıyla tamamlanmadı, yürütme için ilgili CATCH blok son hata hakkında bilgileri uzak sunucuda bir yerel sunucuda atlar.Uzak saklı yordamı başarıyla tamamlandı, yürütme yerel sunucu ve dönüş değeri, depolanan uzak TRY blok içinde yordam kullanılabilir sürdürür.

Alternatif olarak, bir TRY kapsam dışında uzak saklı yordam çalıştırıldığında blok, @@ uzaktan yordam tamamlanır olup olmadığını belirlemek için ERROR uzak saklı yordamın sonundaki inceleyin.@@ ERROR 0 ise, uzak saklı yordam başarıyla yürütüldü ve depolanmış yordamın dönüş değeri kullanılabilir.@@ ERROR, sıfır değilse, uzak saklı yordam başarıyla tamamlanamadı ve depolanmış yordamın dönüş değerini kullanılamaz.

ON küme XACT_ABORT iş

küme XACT_ABORT ON yerel sunucu, ayarı bağlantılı sunucuya yayılır.Tüm toplu iş iş durdurma hataları uzak saklı yordam ve deyim toplu iş iş durdurma yerel sunucu hataları dönüştürülür.Bu nedenle, uzak saklı yordam adı verilen bir saklı yordam veya toplu iş yürütme birlikte uzaktan saklı yordamın sonlandırıldı.Yerel sunucuda TRY bloğunun kapsam içinde bir hata üretir uzak saklı yordam çalıştırıldığında, hata denetimi, CATCH blok son hata hakkında bilgi için uzak sunucuda geçirmek neden olur.

uzak saklı yordam kapsam dışında bir TRY olduğunda yürütülür blok, @@ ERROR yürütmek deyim sonraki yürütmek değil çünkü bir toplu iş hatası oluştuğunu belirlemek için değeri inceleyin edemiyor.Bu nedenle, bir uzak saklı yordam içindeki bir TRY…CATCH yapýsý TRY bloğuna bağlamını belirtir.Başarıyla, uzaktan saklı yordamını, yerel sunucuda uzak sunucuda son hatayla ilgili bilgilerle ilişkili CATCH blok yürütme atlar tamamlanmaz.Uzak saklı yordam başarıyla tamamlarsa, yürütme yerel sunucu ve dönüş değeri, depolanan uzak TRY blok içinde yordam kullanılabilir sürdürür.

RAISERROR ve TRY…CATCH

uzak saklı yordam içindeki 20'den daha az önem derecesi ile RAISERROR çağrılıyor uzak sunucuda bir deyim durdurma hatası neden olur.Yerel sunucu tanıtıcısı uzak toplu iş iş işlemindeki BIR TRY…CATCH yapýsý yalnızca hataları durdurur.Uzak bir saklı yordam, 20'den daha az önem derecesi ile RAISERROR çağırır ve uzak saklı yordam içindeki yerel sunucuda bir TRY bloğuna kapsamlı, RAISERROR denetim TRY…CATCH yapýsý CATCH blok geçmesine neden olmaz.Ancak, RAISERROR ile 20 veya daha fazla uzak sunucuda bağlantıyı keser ve CATCH blok için yerel sunucuda yürütme geçirir.