wie man eine Sperre in SQL server zu erzwingen?

Ich arbeite daran, eine Anwendung auf Postgres und SQL server laufen zu lassen.

In PostgreSQL kannst du so etwas machen

lock mytable exclusive; 

die den ganzen Tisch vor dem Schreiben / Einfügen / Aktualisieren behalten würde. Ich brauche den ganzen Tisch, um gesperrt zu werden, während bestimmte Dinge aktualisiert werden (und RIDs können nicht geändert werden oder sonst wird es verschwinden)

Ich sehe keinen einfachen path, um Sql server zu erzwingen, um dies zu tun. Die einzigen Dinge, die ich sehe, sind für eine Abfrage und sind nur "Hinweise", die möglicherweise nicht befolgt werden können oder nicht. Wie kann ich eine Tabelle sperren, damit sie in SQL server für die Dauer einer Transaktion schreibgeschützt ist?

Ein verschlossener Tisch ist nicht schreibgeschützt. Ist gesperrt.

SQL server erlaubt keine explizite Sperrung von Motorprimitiven (Tabellen, Partitionen, Seiten, Zeilen, Metadaten usw.). Es erlaubt Ihnen nur explizite Applikationssperren über sp_getapplock zu erwerben .

Wenn du die Richtigkeit unter den Bedingungen vorhersagen willst, wirst du es tun müssen, so wie es sonst noch ist: über transactions, ordnungsgemäßes Isolationsniveau und korrekte Update-Reihenfolge. Mit der OUTPUT-Klausel von UPDATE / DELETE / INSERT können viele Bedingungen für die Wettkampfbedingungen vermieden werden.

Letztlich kannst du eine X-Sperre auf einen Tisch mit einem SELECT ... FROM Table WITH (TABLOCKX) WHERE... , aber ich würde das extrem schlechte Programmier-Flair nennen.

Auf SQL server können Sie die Transaktionsisolationsebene für die jeweilige Verbindung read commited oder serializable . Das sollte die Verriegelung sicherstellen, die Sie benötigen.