Diversi modi per generare l'ultima chiave primaria primaria di tipo int nel codice

0

Sono nuovo di sql. Ho aggiunto 2 nuove tabelle nel database. La prima chiave è una chiave straniera nell'altra. Il tipo di chiavi è intero. Ora voglio generare le chiavi nel codice e assegnarlo a nuovi dati in modo che l'associazione tra le diverse righe delle tabelle sia corretta. Come posso garantire l'univocità delle chiavi e ottenere anche l'ultima chiave dal db in modo che non ci siano errori durante il salvataggio.

Se avessi usato i guids, avrei assegnato un nuovo guid alla chiave primaria e poi assegnato lo stesso alla chiave esterna nell'altra tabella. Inoltre ci sono più client e un server che sta salvando i dati.

I dati da inserire in entrambe le tabelle sono decisi nel codice c # e non derivano dalla riga inserita nella tabella primaria. Anche se ottieni l'id in db, allora anche la relazione tra le righe dovrebbe essere memorizzata in qualche modo dal codice, perché dopo è andata persa.

    
posta puneet 11.08.2013 - 19:07
fonte

1 risposta

2

Se devi generare chiavi sui client, avrai bisogno di un modo per evitare le collisioni (due client che creano la stessa chiave). È possibile farlo utilizzando GUID, poiché i GUID sono enormi e gli algoritmi che li generano sono stati progettati per ridurre al minimo le collisioni. Se è necessario utilizzare INT, è necessario eseguire il rollover del proprio metodo, probabilmente prima che ogni client riservi un blocco di ID in anticipo, il che sarà semplicemente contorto, quindi non farlo.

È molto più semplice generare chiavi sul server, perché è sempre presente e sa cosa è stato e non è stato utilizzato. In SQL Server, è possibile contrassegnare la colonna id con IDENTITY , per fare in modo che SQL Server generi automaticamente un ID quando inserisci un record in quella tabella. È possibile ottenere il valore utilizzato da SQL Server nell'inserto appena creato utilizzando la funzione @@ IDENTITY o la funzione SCOPE_IDENTITY . Se stai utilizzando una stored procedure, puoi restituire i valori dell'identità come parametro di output o nel set di risultati oppure puoi SELECT SCOPE_IDENTITY() dal tuo client.

    
risposta data 11.08.2013 - 21:30
fonte

Leggi altre domande sui tag