Lock-Tabelle beim einfügen

Ich habe eine große Tabelle, die bekommen bevölkert von einer Ansicht. Dies geschieht, weil der Blick dauert eine lange Zeit zu laufen und es ist einfacher, die Daten leicht zugänglich in einer Tabelle. Eine Prozedur wird ausgeführt, jeder so oft, aktualisiert die Tabelle.

 TRUNCATE TABLE LargeTable

 INSERT INTO LargeTable
 SELECT * 
 FROM viewLargeView
 WITH (HOLDLOCK)

Möchte ich lock dieser Tabelle beim einfügen also, wenn jemand versucht, einen Datensatz auswählen, werden Sie nicht erhalten keine nach dem abschneiden. Die Sperre, die ich benutze scheint sperren Sie die Ansicht und nicht die Tabelle.

Gibt es eine bessere Möglichkeit zur Lösung dieses Problems?

Was ist mit der Eröffnung einer Verhandlung vor dem einfügen und schließen Sie es nach ?
Beim öffnen einer Transaktion kann ein weiterer Benutzer wählen Sie aus der Tabelle?
FYI, ich würde empfehlen, dass Sie LÖSCHEN statt TRUNCATE, TRUNCATE ist eine DDL, statt einer DML-wie LÖSCHEN und erfordert somit höhere Berechtigungen. Plus, wenn Sie wickeln Sie diesen in eine Transaktion (welche ist die richtige Antwort auf Ihre Frage), werden Sie effektiv führen Sie die gleichen.
Plus, TRUNCATE TABELLE innerhalb einer Transaktion kann ein lock-up Ihrer Datenbanken Metadaten für die Dauer der Transaktion, die in bad juju wenn es blockiert wird. Wenn dieser funktionsfähig ist (außerhalb der Geschäftszeiten), dann ist es wohl OK, aber wenn Sie läuft, während Sie den Benutzern die Interaktion mit der Datenbank, die Sie möglicherweise Probleme haben...

InformationsquelleAutor JBone | 2012-03-23

Schreibe einen Kommentar