7 Stimmen

Einschränkung einer Tabelle auf nur eine Zeile

Wie kann man eine SQL-Tabelle so einschränken, dass sie nicht mehr als eine Zeile enthält?

Diese Frage betrifft erörtert, warum eine solche Tabelle existieren könnte, aber nicht, wie die Einschränkung implementiert werden sollte.

Bisher habe ich nur Hacks mit einer eindeutigen Schlüsselspalte gefunden, die auf einen bestimmten Wert beschränkt ist, z. B. ALWAYS_0 TINYINT NOT NULL PRIMARY KEY DEFAULT (0) CONSTRAINT CHECK_ALWAYS_0 CHECK (ALWAYS_0 = 0) . Ich vermute, dass es wahrscheinlich einen saubereren Weg gibt, dies zu tun.

Die ideale Lösung wäre ein portables SQL, aber eine Lösung speziell für MS SQL Server oder Postgres wäre auch nützlich.

4voto

Donnie Punkte 43338

Der sauberste Weg wäre (meiner Meinung nach) ein ON INSERT Trigger, der eine Ausnahme auslöst (und damit das Einfügen der Zeile verhindert). Dies gibt auch der Client-Anwendung eine Chance, sich ordnungsgemäß zu erholen.

3voto

SQB Punkte 3750

Ich habe gerade das gleiche Problem auf SQL Server 2008 gelöst, indem ich eine Tabelle mit einer berechneten Spalte erstellt und den Primärschlüssel auf diese Spalte gelegt habe:

CREATE TABLE MyOneRowTable (
    [id] AS (1) PERSISTED NOT NULL CONSTRAINT pk_MyOneRowTable PRIMARY KEY,
    -- rest of the columns go here
);

1voto

mmmmmm Punkte 31394

Verwenden Sie Grant, um allen Personen die Berechtigung zu entziehen, nach dem Hinzufügen der einen Zeile in die Tabelle einzufügen

Ihre Datenbank wird in der Lage sein, Einfügungen vorzunehmen, aber die Datenbank sollte nur Schemaänderungen durchführen, die überprüft werden, so dass dies in der Praxis kein Problem darstellen sollte.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X