Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Проверка на ограниченията:TRY/CATCH срещу Exists()

Виждал съм тази статия, но имайте предвид, че за ниски нива на отказ бих предпочел модела "JFDI". Използвал съм това на системи с голям обем преди (40 000 реда/секунда).

В кода на Aaron все още можете да получите дубликат, когато тествате първо при голямо натоварване и много записи. (обяснено тук на dba.se ) Това е важно:вашите дубликати все още се случват, но по-рядко. Все още се нуждаете от обработка на изключения и да знаете кога да игнорирате дублиращата се грешка (2627)

Редактиране:обяснено накратко от Remus в друг отговор

Въпреки това бих имал отделен TRY/CATCH за тестване само за дублиращата се грешка

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. SQL Server 2008 е инсталиран, въпреки че работещата версия все още е 2005

  2. Връщане на списък със сървърни тригерни събития в SQL Server

  3. SQL присъединяване към корелирана подзаявка, където таблиците са свързани чрез припокриващи се диапазони

  4. По-добър начин да проверите дали данните вече съществуват и да ги вмъкнете

  5. Хирархично сортиране в sql сървър, когато идентификаторът на детето съдържа '.'