Heim >Datenbank >MySQL-Tutorial >Wie kann sichergestellt werden, dass in SQL Server nur für einen Datensatz das Flag „isDefault' auf 1 gesetzt ist?
Sicherstellung nur eines Datensatzes mit dem Flag „isDefault“
In einer Datenbanktabelle möchten Sie möglicherweise die Daten so einschränken, dass nur ein Datensatz pro Datensatz vorhanden ist Für eine definierte Gruppe kann ein bestimmtes „isDefault“-Flag auf 1 gesetzt sein. Dies stellt eine Herausforderung dar, da die Einschränkung nicht tabellenweit gilt, sondern stattdessen für eine Teilmenge von Zeilen gilt, die durch ein eindeutiges Zeichen identifiziert werden ID.
Lösung: Verwendung eines eindeutigen gefilterten Index
Moderne SQL Server-Versionen (2008 und höher) bieten eine Lösung mit eindeutigen gefilterten Indizes. Indem Sie einen solchen Index erstellen, können Sie die Einschränkung für das Feld „isDefault“ für einen bestimmten Satz von Zeilen erzwingen.
Indexerstellungssyntax
Für eine Tabelle definiert als folgt:
CREATE TABLE TableName( FormID INT NOT NULL, isDefault BIT NOT NULL )
Sie können den eindeutigen gefilterten Index mit der folgenden Syntax erstellen:
CREATE UNIQUE INDEX IX_TableName_FormID_isDefault ON TableName(FormID) WHERE isDefault = 1
Dies Der Index verhindert doppelte Schlüsselverletzungen, wenn versucht wird, mehrere Datensätze mit derselben FormID einzufügen und „isDefault“ auf 1 gesetzt ist. Zum Beispiel:
INSERT INTO TableName(FormID, isDefault) VALUES (1, 1) INSERT INTO TableName(FormID, isDefault) VALUES (1, 1) -- Will result in a unique key violation error
Durch die Einrichtung dieses Indexes stellen Sie effektiv sicher, dass in jedem nur ein Datensatz vorhanden ist Das FormID-Set kann das „isDefault“-Flag auf 1 setzen, um die gewünschte Datenintegrität aufrechtzuerhalten.
Das obige ist der detaillierte Inhalt vonWie kann sichergestellt werden, dass in SQL Server nur für einen Datensatz das Flag „isDefault' auf 1 gesetzt ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!