Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Sprawdzanie ograniczeń:TRY/CATCH vs Exists()

Widziałem ten artykuł, ale zauważ, że w przypadku niskich wskaźników awaryjności wolę wzór „JFDI”. Używałem tego wcześniej w systemach o dużej objętości (40 tys. wierszy na sekundę).

W kodzie Aarona nadal można uzyskać duplikat podczas testowania najpierw pod dużym obciążeniem i dużą ilością zapisów. (wyjaśnione tutaj na dba.se ) To ważne:duplikaty nadal się zdarzają, tylko rzadziej. Nadal potrzebujesz obsługi wyjątków i wiedzy, kiedy zignorować błąd duplikatu (2627)

Edycja:wyjaśnione zwięźle przez Remusa w innej odpowiedzi

Miałbym jednak oddzielny TRY/CATCH do testowania tylko za duplikat błędu

BEGIN TRY

-- stuff

  BEGIN TRY
     INSERT etc
  END TRY
  BEGIN CATCH
      IF ERROR_NUMBER() <> 2627
        RAISERROR etc
  END CATCH

--more stuff

BEGIN CATCH
    RAISERROR etc
END CATCH


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak znaleźć sortowanie bazy danych obsługiwane przez instancję SQL Server?

  2. SQL Server 2005/2008 Grupuj według instrukcji z parametrami bez użycia dynamicznego SQL?

  3. Jak za pomocą SSDT rozwiązać błędy SQL71561 w widoku, który odwołuje się do obiektów w innej bazie danych?

  4. Zapytanie o dane z kolumny XML w SQL Server

  5. Jak połączyć ciąg w SQL