Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server 2008:Wenn INSERT nicht beendet wird, behalten Sie die eindeutige Spalte bei

Es ist Wahnsinn, keinen Index zu haben.

Es würde helfen, aber die Länge des Indexschlüssels darf nur 900 Bytes betragen.

Es ist jedoch wahrscheinlich, dass Sie bereits Duplikate haben, da die Möglichkeit besteht, dass ein zweites EXISTS nach dem ersten EXISTS, aber vor dem ersten INSERT ausgeführt wird.

Die Indexerstellung wird es Ihnen mitteilen und sich anschließend dagegen schützen.

Unter hoher Last können jedoch Fehler auftreten.

Mein bevorzugter Ansatz für hohe Einfügungen/niedrige Duplikate ist das JFDI-Muster. Sehr gleichzeitig

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