47 messaggi dal 15 settembre 2003
Salve,

è da poco che lavoro con sql server e mi serve la stessa funzionalità di blocco tabelle come in MySQl.

Ho la necessità di inserire dei dati di un utente in sequenza evitando che si possano mischiare con quelli di altri utenti. L'inserimento di dati avviene in fase di registrazione ad un servizio

In pratica devo bloccare in R/W la tabella, eseguire gli n INSERT e poi sbloccarla.

Si può fare in sql Server?

Grazie

Marco
Concetto un po' equivoco...puoi:
1. usare una transazione che evita quello che hai detto
2. marcare il record con un campo in più che è quello dell'utente di inserimento

Ormai programmano tutti... ma la professionalità appartiene a pochi
47 messaggi dal 15 settembre 2003
Mi spiego meglio...

devo gestire le richieste concorrenti, in pratica quando un utente lancia la registrazione è il solo che può inserire i dati nella tabella, tutti gli altri devono rimanere in coda.

Ti faccio l'esempio in Mysql

LOCK TABLES tabella1 WRITE

Insert into tabella1 (col1, col2,...) Values (valore1, valore2,..)
Insert into tabella1 (col1, col2,...) Values (valore1, valore2,..)
Insert into tabella1 (col1, col2,...) Values (valore1, valore2,..)
Insert into tabella1 (col1, col2,...) Values (valore1, valore2,..)
Insert into tabella1 (col1, col2,...) Values (valore1, valore2,..)
Insert into tabella1 (col1, col2,...) Values (valore1, valore2,..)

UNLOCK tabella1


Questo mi serve perché tutte le righe relative ad un utente devono essere sequenziali

tabella1 (situazione corretta)

id id_utente dato
1 1 ....
2 1 ....
3 1
4 1
5 2
6 2
7 2
8 2


tabella1 (situazione sbagliata)

id id_utente dato
1 1 ....
2 1 ....
3 2
4 1
5 1
6 2
7 2
8 2

spero di essere stato più chiaro.
1.976 messaggi dal 27 luglio 2005
Contributi
salve Marco,
mdenicola wrote:
Salve,
è da poco che lavoro con sql server e mi serve la stessa funzionalità di blocco tabelle come in MySQl.
Ho la necessità di inserire dei dati di un utente in sequenza evitando che si possano mischiare con quelli di altri utenti. L'inserimento di dati avviene in fase di registrazione ad un servizio In pratica devo bloccare in R/W la tabella, eseguire gli n INSERT e poi sbloccarla.
Si può fare in sql Server?
Grazie
Marco

scusami se sembrero' "duro", ma personalmente non comprendo molto il fatto di dover bloccare la tabella... tecnicamente non ha senso e mi pare denotare un'affermazione alquanto "erratica": "tutte le righe da 1 a 1000 costituiscono xxx"... questa' e' tendenzialmente un'affermazione sbagliata di principio... le righe possono "appartenere" a qualche cosa solo nel senso di un'apposito constraint, ad esempio una foreign key... quindi, tutte le righe che referenzino la riga esterna X "appartarterranno" a questo qualche cosa... diversamente e' solo un errore di design alquanto "infantile"... come ben sai, infatti, una tabella in quanto tale non ha un senso di ordinamento o separazione dato che tutto cio', convenzionalmente, matematicamente e by design non ha alcun senso... l'ordinamento ha un senso solo successivamente in termini di proiezione, operazione completamente avulsa dal recupero delle righe costituenti il subset restituito... inoltre, se l'operazione non e' un'operazione una tantum di carattere amministrativo ma un'operazione ordinaria quotidiana, ovviamente penalizza enormemente la concorrenza...
quindi non sono tendenzialmente d'accordo su quanto proponi... detto cio', puoi provare ad eseguire un blocco a livello di select con l'hint WITH TABLOCKX a livello di una transazione esplicita impostata anche a livello di concorrenza SERIALIZABLE, quindi procedere all'inserimento per poi chiudere con commit (o rollback) la transazione esplicita... personalmente non ho mai sperimentato quesat implementazione in quanto assurdamente fuori luogo in qualsiasi scenario a me conosciuto... non pratico, non necessario, non utile, non....
saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php

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.