Select MAX(Feld)+1 AUS ... parallelitätsproblemen
Hallo, ich fürchte über die Parallelität auf partner-Anwendung verursachen, die in den letzten Tagen war es Probleme mit den CRUDS Operationen, insbesondere mit Einlagen. Also lief ich den SQL Profiler, und beachten Sie, dass diese insert-Anweisung nicht verwenden Transaktion und auch er ist mit :
INSERT INTO TABLEA VALUES ( (SELECT MAX(NUMBERFIELD) +1 FROM TABLEA), ....);
Wie vermeiden Sie die Verwendung von MAX()+1 erzeugen, Primärschlüssel? Ich schlage autoincrement oder transaktionsbereichen aber er will nicht, dass oder vielleicht, er weiß nicht, wie das zu erreichen, gibt es eine andere Möglichkeit für das führen mit diesem?
Mithilfe von SQL und C++ 1.1
*Es ist nicht mein code, aber ich könnte prüfen, zeigen, diesen Beitrag zu ihm, weil ich denke, er ist zu berücksichtigen, dass alle Meinungen sind willkommen. 🙂
- SQL Server entspricht der von MySQL autoincrement-namens IDENTITY: msdn.microsoft.com/en-us/library/aa933196%28SQL.80%29.aspx
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie den code es Recht, Sie sollten in der Lage sein, um die gleiche Parallelität wie mit einer IDENTITY-Lösung. Es ist nicht intuitiv, Sie würden denken, dass die sperren würden Parallelität verringert. Aber ich lief mehrere tests mit fünf verschiedenen verbindungen hämmern der Tabelle, und bewiesen mir, dass die MAX+1 trick durchgeführt, die ziemlich genau das gleiche wie IDENTITÄT. Dir können siehe die Diskussion im ersten Abschnitt der folgenden blog-post:
https://sqlblog.org/2009/10/12/bad-habits-to-kick-making-assumptions-about-identity
Egal, hier ist die syntax, die ich empfehlen (ich habe nicht wirklich Vertrauen in die INSERT ... VALUES (UNTERABFRAGE) Modell, sorry):
Müssen Sie sich vorstellen, die Fehlerbehandlung Teile (aus Platzgründen weggelassen), aber ich denke, Sie bekommen die drift.
Natürlich nicht nehmen, diese für das Evangelium. Sie müssen tests ausführen, die auf deiner hardware mit deinen Daten und den Zugang Muster, um zu bestimmen, ob Parallelität geschädigt wird durch diese Methode. Dies könnte sehr wohl eine von diesen "es kommt darauf an" Antworten.
Haben Sie überlegt, ob der primary key-Spalte
IDENTITY
? Sie werden SQL Server generiert automatisch Werte für die Spalte:MAX() + 1
nicht, dass die Folge Nummer Anforderung entweder. Sie können noch Lücken haben, wenn Sie eine Zeile löschen (außer der letzten).