sql >> Databasteknik >  >> RDS >> Sqlserver

Kontroll av begränsningar:TRY/CATCH vs Exists()

Jag har sett den artikeln men notera att för låga felfrekvenser skulle jag föredra "JFDI"-mönstret. Jag har använt detta på högvolymsystem tidigare (40k rader/sekund).

I Aarons kod kan du fortfarande få en duplikat när du testar först under hög belastning och massor av skrivningar. (förklaras här på dba.se ) Detta är viktigt:dina dubbletter sker fortfarande, bara mer sällan. Du behöver fortfarande hantera undantag och veta när du ska ignorera dubblettfelet (2627)

Edit:förklarat kortfattat av Remus i ett annat svar

Jag skulle dock ha en separat TRY/CATCH för att endast testa för dubblettfelet

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. MySQL ERROR 1327 när du gör en INTO FROM

  2. Laravel PDOException SQLSTATE[HY000] [1049] Okänd databas 'forge'

  3. Problem med komplex mysql-fråga med förberedd uttalande

  4. PHP-konstant inte definierad