2016-08-01 12 views
-3

Ich mache Web App und ich möchte eine Tabelle wie Marks_Table die ganze Zeit verfügbar sein, so dass Schüler, selbst wenn ein Lehrer Markierungen hochladen, nicht blockiert werden sollten, um ihre Marken aus dieser Tabelle zu sehen.Wie kann ich eine Transaktion ausführen und die Tabelle nicht sperren, damit andere Änderungen vornehmen können?

+0

Die Abfragen, die auf die Tabelle verweisen, können den Query-Hinweis 'with (NOLOCK)' verwenden (obwohl das andere Probleme mit inkonsistenten Daten verursachen könnte). Wenn Sie nur eine einzelne Zeile aktualisieren, ist der Aufwand wahrscheinlich gering. –

+0

Hinzufügen 'WITH (NOLOCK)' zu den gelesenen Abfragen? – TZHX

+0

Ich füge mehrere Reihen hinzu –

Antwort

0

Zum Beispiel Student hat einen Wert 5 als Klasse in der Tabelle nun wenn Schüler A eine Abfrage durchführt, wird er grade 5

Nun sehen, wenn der Lehrer mit Transaktionen auf diesem Tisch besetzt ist der Student aus keine Ergebnisse bekommt seine Abfrage, bis der Lehrer fertig ist, weil seine Transaktionen die Tabelle sperren.

Was Sie wollen, ist, dass der Student seine Abfrage erhält, während der Lehrer Transaktionen ausführt, er wird nur einen Wert 5 sehen, weil das der letzte commited Wert für ihn in dieser Tabelle war, richtig? Mit anderen Worten, die Schüler können F5 drücken und werden ihre alten Werte sehen, bis der Lehrer neue Werte festlegt, was wie eine normale Vorgehensweise klingt.

Wenn ja, können Sie versuchen, diese: (muss nur einmal in der Datenbank durchgeführt werden)

ALTER DATABASE yourdatabase SET READ_COMMITTED_SNAPSHOT ON; 

sehen: https://www.brentozar.com/archive/2013/01/implementing-snapshot-or-read-committed-snapshot-isolation-in-sql-server-a-guide/

aber auch bedenken, dass alle Transaktionen auf Tabellen in Ihrer Datenbank sollte so kurz wie möglich gehalten werden, was das Problem in erster Linie vermeiden würde. Kein Student wird sich beschweren, wenn er eine halbe Sekunde warten muss, bis seine Ergebnisse nach dem Auffrischen angezeigt werden. Sie werden sich beschweren, wenn sie Minuten warten müssen.

+0

Ich verwende TransactionScope-Objekt, um die Transaktion abzuschließen und durchzuführen, würde das mein Problem automatisch lösen ?? –

+0

Weil ich gelesen habe, dass es serialize Isolation-Level verwendet –

+0

Ich bin nicht vertraut mit dem TransactionScope-Objekt, aber da diese alter-Anweisung ändert die Art, wie Ihre Datenbank Datensätze liest ich denke, es wird – GuidoG

Verwandte Themen