Obsługa błędów w zdalnych procedur przechowywanych do serwera

Po uruchomieniu zdalnych procedur przechowywanych i instancje z lokalnego wystąpienie SQL Server do klient, można wystąpić instrukcja i błędy przerwanie partia:

  • Gdy wystąpi błąd przerwania instrukcji, instrukcja, która spowodowała błąd jest zakończony, ale wykonanie zdalna procedura składowana lub nadal partii.

  • Gdy wystąpi błąd przerwania partia, kończy wykonywanie pełnej zdalna procedura składowana lub partia.

  • Podczas zdalnego procedur przechowywanych i instancje są wykonywane w zakres z blok TRY partia przerwanie błędy mogą być obsługiwane przez TRY…CATCH konstrukcji.

Zachowanie zdalnych procedur przechowywanych i instancje wynikające z błędów przerwanie partia i instrukcja zależy od ustawienia USTAWIĆ XACT_ABORT serwera lokalnego.

ZESTAW XACT_ABORT jest wyłączona

Jeśli XACT_ABORT USTAWIĆ jest wyłączona w lokalnym serwerze, wszelkich instrukcji Przerwij błędów w zdalna procedura składowana są propagowane jako instrukcja Przerwij błędy przez lokalny serwer do klient.Instrukcja, która spowodowała błąd jest przerywane.Klient odbiera komunikaty o błędach odpowiadające błędy instrukcja Przerwij.Ponadto jeśli zdalna procedura składowana uruchamia, dopóki nie zostanie zakończone, błąd @@ zwraca wartość 0.Jeśli błąd występuje w zakres z bloku TRY kontynuuje wykonywanie i blok CATCH nie jest wywoływany.

Każda partia przerwać błędów w zdalna procedura składowana są propagowane przez lokalny serwer do klient.Kończy instrukcja EXECUTE, odwołujące się do zdalna procedura składowana, ale partia lub procedury przechowywanej, który zawierał instrukcja EXECUTE kontynuuje działanie.Dlatego @@ błąd zwraca kod błędu, który odpowiada błędu, który zakończone zdalna procedura składowana i procedura przechowywana wartość zwracana jest wartość NULL.Podczas zdalnego procedura składowana , generuje błąd jest wykonywany w zakresie blok TRY na serwerze lokalnym, błąd powoduje, że formant do przekazywania do blok CATCH informacje o ostatnim błędzie na serwerze zdalnym.

Podczas rozwiązywania błędów wykonywania zdalna procedura składowana z wewnątrz SPRÓBUJ zablokować z TRY…CATCH konstrukcji.Jeśli zdalna procedura składowana jest nie zakończone pomyślnie, któremu uskoków wykonanie skojarzone bloku CATCH na lokalnym serwerze informacje na temat ostatniego błędu na serwerze zdalnym.Jeśli zdalna procedura składowana zostanie ukończona pomyślnie, kontynuuje wykonywanie wewnątrz blok TRY na serwerze lokalnym i wartość zwracaną przez zdalna procedura składowana mogą być używane.

Alternatywnie podczas wykonywania zdalna procedura składowana poza zakres z blok TRY zbadać @@ błąd na końcu zdalnego procedurę przechowywaną, aby ustalić, czy remote procedure jest ukończona.Jeżeli błąd @@ wynosi 0, zdalna procedura składowana została wykonana pomyślnie i mogą być używane wartości zwracanej procedury przechowywanej.Jeśli błąd @@ nie jest zero, zdalna procedura składowana nie została ukończona pomyślnie i nie można używać wartości zwracanej procedury przechowywanej.

ZESTAW XACT_ABORT znajduje się na

Jeśli XACT_ABORT USTAWIONA jest na lokalny serwer, ustawienia są propagowane do serwer połączony.Wszystkich instrukcja i instancji przerwać błędów w zdalna procedura składowana są konwertowane na partia przerwanie błędy serwera lokalnego.Dlatego wykonanie partia lub procedura przechowywana, nazywane zdalnego procedura przechowywana jest zakończony wraz ze zdalna procedura składowana.Podczas zdalnego procedura składowana , generuje błąd jest wykonywany w zakresie blok TRY na serwerze lokalnym, błąd powoduje, że formant do przekazywania do blok CATCH informacje o ostatnim błędzie na serwerze zdalnym.

Podczas zdalnego procedura składowana jest wykonywany poza zakres z blok TRY, nie można zbadać wartość @@ błędu, aby określić, że wystąpił błąd partia, ponieważ nie wykonuje instrukcja znajdującej się po instrukcja wykonać.Dlatego należy wykonać zdalna procedura składowana z wewnątrz SPRÓBUJ zablokować z TRY…CATCH konstrukcji.Jeśli zdalna procedura składowana nie zostanie zakończona pomyślnie, wykonanie przechodzi do skojarzonego blok CATCH na lokalnym serwerze informacje na temat ostatniego błędu na serwerze zdalnym.Pomyślnie wykona zdalna procedura składowana, kontynuuje wykonywanie wewnątrz blok TRY serwera lokalnego i zdalnego przechowywane wartości zwracanej procedura może być użyta.

RAISERROR i TRY…CATCH

Wywoływanie RAISERROR z ważności mniej niż 20 od wewnątrz zdalna procedura składowana powoduje błąd przerwania instrukcja na serwerze zdalnym.TRY…POŁÓW konstruować na lokalny serwer obsługuje partia zdalnego przerwij tylko błędy.zdalna procedura składowana wywołuje RAISERROR z mniej niż 20 ważności zdalnego procedura przechowywana jest objęty zakresem wewnątrz blok TRY na serwerze lokalnym, RAISERROR nie powoduje kontroli, przekazywane do blok CATCH TRY…CATCH konstrukcji.Jednak RAISERROR z ważności 20 lub większa na serwerze zdalnym przerywa połączenie i wykonanie na lokalnym serwerze przekazuje do blok CATCH.