Ho una chiave primaria che non desidero incrementare automaticamente (per vari motivi) e quindi sto cercando un modo per incrementare semplicemente quel campo quando INSERISCO. Con parole semplici intendo senza stored procedure e senza trigger, quindi solo una serie di comandi SQL (preferibilmente un comando).È possibile implementare un incremento manuale semplicemente con SQL INSERT semplice?
Ecco quello che ho provato finora:
BEGIN TRAN
INSERT INTO Table1(id, data_field)
VALUES ((SELECT (MAX(id) + 1) FROM Table1), '[blob of data]');
COMMIT TRAN;
* Data abstracted to use generic names and identifiers
Tuttavia, quando eseguito, gli errori di comando, dicendo che
"subquery non sono ammessi in questo contesto solo espressioni scalari. sono consentiti "
Quindi, come posso fare questo/cosa sto facendo di sbagliato?
EDIT: Da quando è stato rilevato come considerazione, il tavolo da inserire è garantita per avere già almeno 1 fila.
Perché ci dovrebbero essere collisioni? Tali cose sono gestite dalla transazione, sì? Inoltre, da dove verrebbero i deadlock? – cdeszaq
non se si esegue sotto il livello transazionale predefinito (letto commesso), cosa impedisce a due thread di leggere lo stesso valore massimo? – SQLMenace
I deadlock possono essere evitati omettendo il suggerimento 'Holdlock' –