103 messaggi dal 14 aprile 2014
Ciao a tutti.

in un database SQL Server ho una tabella ordini in cui voglio inserire il numero d'ordine che è rappresentato da un numero univoco da 1 in avanti.

Ho pensato di utilizzare una SEQUENCE.

Quando effettuto una INSERT leggo una SEQUENCE e inserisco il numero ottenuto nella tabella

Se però più utenti nello stesso momento effettuano un inserimento ho questi dubbi:

1) il numero univoco viene rispettato ? ovvero ad ogni utente "concorrente" viene rilasciato un numero in sequenza corretto ?

2) vado incontro a LOCK / DEAD LOCK ? ovvero la SEQUENCE viene bloccata dal primo utente che fa la richiesta quando più utenti ne chiedono il numero ?

Grazie.

Filippo
427 messaggi dal 13 novembre 2009
Ma scusa se usi sql server l’id della tabella impostato su PK e identity è la sequence. Perché calcolarla visto che lo fa già sql?
103 messaggi dal 14 aprile 2014
ciao flaviob

Non riesco a postare la risposta mi dice che il mio testo risulta come SPAM (boh !) quindi semplifico:

A me serve solo sapere se la SEQUENCE è soggetta a LOCK e in caso di INSERT concorrenti (esempio 1000 utenti contemporaneamente) rilascia 1000 numeri in sequenza corretta o va in LOCK quindi non va bene per inserimenti ad elevata concorrenza.

Filippo
427 messaggi dal 13 novembre 2009
Se parliamo una PK identity assolutamente si. È sequenziale e a meno di insert fallita non risulteranno salti
Quindi se la prima operazione inserisce in batch 1000 utenti avrai 1/1000
La successiva 1001…ecc
Tieni presente che se vuoi farti tornare l’identity per ciascun inserimento dovrai programmare questa evenienza.
Se le attività di inserimento da parte di due utenti sono contemporanee ti devi regolare di conseguenza.
La tabella viene kollata solo se la insert è in batch e:o in transazione
Quindi se 1000 utenti fanno insert contemporaneamente otterranno ciascuno una identity univoca e in sequenza in funzione delle insert accodate da sql server
Modificato da flaviovb il 21 dicembre 2021 21:01 -

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.