2013-03-20 21 views
6

Piszę procedurę przechowywaną, która uruchamia kwerendy SELECT na kilku różnych połączonych serwerach przy użyciu notacji z 4 kropkami.Sprawdź, czy podłączony serwer SQL działa

Problem polega na tym, że jeśli jeden z połączonych serwerów nie działa, zapytanie kończy się niepowodzeniem z błędem 121 ('The semaphore timeout period has expired'). Inne zapytania nie będą wtedy działać, ponieważ ten błąd zatrzyma wykonywanie pozostałych zapytań.

Chciałem sprawdzić @@ERROR, a następnie kontynuować uruchamianie innych zapytań.

Jak kontynuować wyświetlanie zapytania, jeśli połączenie z jednym z połączonych serwerów nie działa?

Używam SQL 2012.

+0

Witamy na połączonych serwerach, lepiej znanych jako rozwiązanie o wysokiej dostępności. Spróbuj zaprojektować rozwiązanie bez/połączonego serwera. –

+0

@ Czy próbowałeś używać [TRY CATCH] (http://msdn.microsoft.com/en-us/library/ms175976.aspx) –

+0

spójrz na: http://stackoverflow.com/questions/4442772/ sql-server-catch-exception-and-continue. Czy to jist tego, co próbujesz zrobić? – RandomUs1r

Odpowiedz

6

Czy chciał otoczyć pojedynczą rozmowę z try-catch wyjątku bloków?

 BEGIN TRY 
      --First Server Connection (Server1) 192.168.1.x 
      --If the connection isn't available it will raise an exception 
      exec sp_testlinkedserver @servername = Server1 
      --SQL statement here 
    END TRY 
    BEGIN CATCH 
      SELECT ERROR_MESSAGE() 
    END CATCH 

    BEGIN TRY 
      --Second Server Connection (Server2) 192.168.2.x 
      --If the connection isn't available it will raise an exception 
      exec sp_testlinkedserver @servername = Server2 
      --SQL statement here 
    END TRY 
    BEGIN CATCH 
      SELECT ERROR_MESSAGE() 
    END CATCH 

sp_testlinkedserver podniesie wyjątek wewnątrz bloku try przed wykonaniem kodu, ale to nie zatrzyma wykonywanie procedury przechowywanej.

+0

Jestem pewien, że to jeszcze nie będzie koniec, a nie wszystkie połączone błędy serwera zostaną przechwycone. Zobacz http://dba.stackexchange.com/questions/36178/linked-server-error-not-caught-by-try-catch –

+0

@AaronBertrand masz zdecydowanie rację, zamierzam edytować mój kod – codingadventures