Heim > Datenbank > MySQL-Tutorial > Wie erzwinge ich eindeutige Einschränkungen für mehrere Spalten in SQL Server?

Wie erzwinge ich eindeutige Einschränkungen für mehrere Spalten in SQL Server?

Linda Hamilton
Freigeben: 2025-01-24 23:37:12
Original
391 Leute haben es durchsucht

How to Enforce Unique Constraints on Multiple Columns in SQL Server?

Implementierung mehrspaltiger eindeutiger Einschränkungen in SQL Server

Die Sicherstellung eindeutiger Wertekombinationen über mehrere Spalten hinweg ist für die Aufrechterhaltung der Datenintegrität von entscheidender Bedeutung. In SQL Server können Sie dies erreichen, indem Sie eine eindeutige Einschränkung oder einen eindeutigen Index für eine bestimmte Spalte implementieren.

Ermitteln Sie den Bedarf an eindeutigen Einschränkungen

Das bereitgestellte Beispiel verdeutlicht die Notwendigkeit, eindeutige Kombinationen der Felder „PersonNumber“ und „Active“ in der Personentabelle sicherzustellen. Dies verhindert die mehrfache Eingabe einer bestimmten Person, wobei nur ein Datensatz pro eindeutiger aktiver Personennummer zulässig ist.

Eindeutige Einschränkung hinzufügen

Um diese Einschränkung durchzusetzen, können Sie eine eindeutige Einschränkung hinzufügen, indem Sie die folgende Syntax verwenden:

<code class="language-sql">ALTER TABLE dbo.yourtablename ADD CONSTRAINT uq_yourtablename UNIQUE(column1, column2);</code>
Nach dem Login kopieren

Alternativ können Sie einen eindeutigen Index erstellen:

<code class="language-sql">CREATE UNIQUE INDEX uq_yourtablename ON dbo.yourtablename(column1, column2);</code>
Nach dem Login kopieren

Beide Methoden haben den gleichen Zweck, nämlich die Unterdrückung doppelter Datensätze basierend auf einer Kombination angegebener Spalten.

Bleiben Sie effizient

Wägen Sie unbedingt die Auswirkungen auf die Leistung ab, wenn Sie eindeutige Einschränkungen implementieren. Sie stellen zwar die Datenintegrität sicher, können aber auch zu Mehraufwand bei Einfügevorgängen führen, wenn Einschränkungen häufig verletzt werden. Erwägen Sie in diesem Fall die Verwendung eines INSTEAD OF-Triggers, um ungültige Einfügungen abzufangen und zu verhindern.

<code class="language-sql">CREATE TRIGGER dbo.BlockDuplicatesYourTable ON dbo.YourTable INSTEAD OF INSERT AS
BEGIN
  SET NOCOUNT ON;

  IF NOT EXISTS (SELECT 1 FROM inserted AS i 
    INNER JOIN dbo.YourTable AS t
    ON i.column1 = t.column1
    AND i.column2 = t.column2
  )
  BEGIN
    INSERT dbo.YourTable(column1, column2, ...)
      SELECT column1, column2, ... FROM inserted;
  END
  ELSE
  BEGIN
    PRINT '插入操作被阻止,因为该组合已存在。'; -- 提供用户反馈
  END
END
GO</code>
Nach dem Login kopieren

Denken Sie daran, dem Benutzer Feedback zu geben, wenn ein Trigger einen Einfügevorgang blockiert, um mögliche Unsicherheiten zu vermeiden.

Beispiel

Die Anwendung dieser Lösung auf das bereitgestellte Beispiel führt zu der folgenden Tabellenstruktur:

<code class="language-sql">CREATE TABLE dbo.Person
(
  ID INT IDENTITY(1,1) PRIMARY KEY,
  Name NVARCHAR(32),
  Active BIT,
  PersonNumber INT
);
GO

ALTER TABLE dbo.Person ADD CONSTRAINT uq_Person UNIQUE(PersonNumber, Active);
GO</code>
Nach dem Login kopieren

Das Einfügen doppelter Datensätze basierend auf der Kombination „PersonNumber“ und „Active“ ist jetzt verboten, wie im folgenden Beispiel gezeigt:

<code class="language-sql">-- 成功
INSERT dbo.Person(Name, Active, PersonNumber)
  VALUES(N'foo', 1, 22);
GO

-- 成功
INSERT dbo.Person(Name, Active, PersonNumber)
  VALUES(N'foo', 0, 22);
GO

-- 失败
INSERT dbo.Person(Name, Active, PersonNumber)
  VALUES(N'foo', 1, 22);
GO</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie erzwinge ich eindeutige Einschränkungen für mehrere Spalten in SQL Server?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage