Qual è la pratica standard per l'estrazione di una chiave primaria a incremento automatico?

3

Ho alcuni oggetti che verranno creati e inseriti nel database. Non è garantito che nessuno dei loro campi sarà univoco ad eccezione della chiave primaria autoincrementante. Mi piacerebbe poter accedere a questi oggetti più avanti nel programma usando la loro chiave primaria.

Qual è il modo migliore per estrarre questa chiave dal database? Posso pensare a due metodi per ottenere la chiave primaria dopo aver aggiunto i dati dell'oggetto al database:

  1. Trova la chiave primaria massima in quanto questa è stata aggiunta più di recente.
  2. Elimina l'oggetto corrente, confronta i dati nel database con i dati nel programma, quindi crea un nuovo oggetto in base alla riga che non è contenuta nel programma.

Entrambi sembrano essere soggetti a errori e hacky e mi chiedo se ci sia un modo più standard per farlo.

    
posta fdsa 20.12.2013 - 18:51
fonte

1 risposta

7

La maggior parte dei database ha un modo per accedere all'ultimo ID generato, ad esempio il server SQL.

CREATE TABLE [SomeTable] (
    ID INT NOT NULL IDENTITY(1,1),
    FieldOne VARCHAR(MAX) NOT NULL,
    PRIMARY KEY(ID)
)

INSERT INTO [SomeTable](FieldOne) VALUES('a')

SELECT scope_identity() -- returns 1

INSERT INTO [SomeTable](FieldOne) VALUES('b')

SELECT scope_identity() -- returns 2

Questo ha il vantaggio di essere sicuro per più utenti / transazioni.

Il primo suggerimento su indovinare quale sarebbe il prossimo ID non è sicuro a tale riguardo.

Il tuo secondo suggerimento distruggera 'il caos se hai qualche integrità referenziale o se ci sono dei trigger.

    
risposta data 20.12.2013 - 19:25
fonte

Leggi altre domande sui tag