Recentemente ho trovato un codice che genera un valore identità per una chiave:
DECLARE @ID INT;
SELECT @ID = MAX(ID) + 1 FROM Person;
INSERT INTO [Person]
([ID], [FirstName], [LastName])
VALUES
(@ID, @FirstName, @LastName);
L'ho portato all'attenzione di un collega che sosteneva che non utilizzare un campo di incremento automatico incorporato è un approccio perfettamente ragionevole alla progettazione del database e in alcuni ambienti una best practice. Il razionale del collaboratore è che ti dà più controllo sui valori e ti consente di manipolare i dati più facilmente.
Potrei solo contrastare sottolineando che sembra semplicemente sciocco implementare la propria versione di una funzionalità supportata dal server. Ed è estremamente incline agli errori se qualcuno decide di utilizzare un metodo diverso per inserire un record.
Ci sono davvero dei buoni motivi per non usare una colonna Identity quando tutto ciò che serve è una chiave artificiale su un tavolo?