SQL Server 2005 Wie erstelle ich eine eindeutige Einschränkung?

181

Wie erstelle ich eine eindeutige Einschränkung für eine vorhandene Tabelle in SQL Server 2005?

Ich suche sowohl nach der TSQL als auch nach der Vorgehensweise im Datenbankdiagramm.

David Basarab
quelle

Antworten:

272

Der SQL-Befehl lautet:

ALTER TABLE <tablename> ADD CONSTRAINT
            <constraintname> UNIQUE NONCLUSTERED
    (
                <columnname>
    )

Die vollständige Syntax finden Sie hier .

Wenn Sie dies anhand eines Datenbankdiagramms tun möchten:

  • Klicken Sie mit der rechten Maustaste auf die Tabelle und wählen Sie "Indizes / Schlüssel".
  • Klicken Sie auf die Schaltfläche Hinzufügen, um einen neuen Index hinzuzufügen
  • Geben Sie die erforderlichen Informationen in die Eigenschaften auf der rechten Seite ein:
    • die gewünschten Spalten (klicken Sie auf die Schaltfläche mit den Auslassungspunkten, um sie auszuwählen)
    • set Is Unique auf Yes
    • gib ihm einen passenden Namen
Rory
quelle
1
Es funktioniert ... aber ... warum die Einschränkung im Ordner INDEX statt im Ordner CONSTRAINTS angezeigt wird. Es wird mit einem anderen Symbol angezeigt, sollte sich jedoch im Ordner "Einschränkungen" befinden.
Fernando Torres
84

In SQL Server Management Studio Express:

  • Klicken Sie mit der rechten Maustaste auf die Tabelle, wählen Sie Ändern oder Entwerfen (für spätere Versionen).
  • Klicken Sie mit der rechten Maustaste auf das Feld und wählen Sie Indizes / Schlüssel ...
  • Klicken Sie auf Hinzufügen
  • Wählen Sie unter Spalten den Feldnamen aus, der eindeutig sein soll.
  • Wählen Sie unter Typ die Option Eindeutiger Schlüssel .
  • Klicken Sie auf Schließen , Tabelle speichern .
James Lawruk
quelle
29
ALTER TABLE [TableName] ADD CONSTRAINT  [constraintName] UNIQUE ([columns])
WildJoe
quelle
15

Warnung: In der Spalte, die Sie als eindeutig festgelegt haben, darf sich nur eine Nullzeile befinden.

Sie können dies mit einem gefilterten Index in SQL 2008 tun:

CREATE UNIQUE NONCLUSTERED INDEX idx_col1
ON dbo.MyTable(col1)
WHERE col1 IS NOT NULL;

Siehe Feldwert muss eindeutig sein, es sei denn, er ist für eine Reihe von Antworten NULL .

Eichhörnchen
quelle
Wie macht man das in SQL Server 2005?
Maxrunner
2
Es ist in SQL Server 2005 nicht erreichbar. Ich würde dringend empfehlen, ein Upgrade auf ein aktuelleres RDBMS
durchzuführen
13
ALTER TABLE dbo.<tablename> ADD CONSTRAINT
            <namingconventionconstraint> UNIQUE NONCLUSTERED
    (
                <columnname>
    ) ON [PRIMARY]
Ivan Bosnic
quelle
10

Ich habe auch festgestellt, dass Sie dies über die Datenbankdiagramme tun können.

Klicken Sie mit der rechten Maustaste auf die Tabelle und wählen Sie Indizes / Schlüssel ...

Klicken Sie auf die Schaltfläche "Hinzufügen" und ändern Sie die Spalten in die Spalten, die Sie eindeutig machen möchten.

Änderung ist eindeutig in Ja.

Klicken Sie auf Schließen und speichern Sie das Diagramm. Es wird der Tabelle hinzugefügt.

David Basarab
quelle
8

Sie suchen nach etwas wie dem folgenden

ALTER TABLE dbo.doc_exz
ADD CONSTRAINT col_b_def
UNIQUE column_b

MSDN Docs

Thunder3
quelle
6

Verwenden Sie die folgende SQL, um eine EINZIGARTIGE Einschränkung für eine oder mehrere Spalten zu erstellen, wenn die Tabelle bereits erstellt wurde:

ALTER TABLE TableName ADd UNIQUE (ColumnName1,ColumnName2, ColumnName3, ...)

Um die Benennung einer EINZIGARTIGEN Einschränkung für die obige Abfrage zu ermöglichen

ALTER TABLE TableName ADD CONSTRAINT un_constaint_name UNIQUE (ColumnName1,ColumnName2, ColumnName3, ...)

Die von MySQL / SQL Server / Oracle / MS Access unterstützte Abfrage.

Rafiq
quelle
UNIQUE NONCLUSTERED und Optionen PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON ?
Kiquenet
5

Wählen Sie im Management Studio-Diagramm die Tabelle aus, klicken Sie mit der rechten Maustaste, um bei Bedarf eine neue Spalte hinzuzufügen, klicken Sie mit der rechten Maustaste auf die Spalte und wählen Sie "Einschränkungen prüfen". Dort können Sie eine hinzufügen.

Gibbons
quelle
0

In einigen Situationen kann es wünschenswert sein, vor dem Erstellen sicherzustellen, dass der eindeutige Schlüssel nicht vorhanden ist. In solchen Fällen kann das folgende Skript hilfreich sein:

IF Exists(SELECT * FROM sys.indexes WHERE name Like '<index_name>')
    ALTER TABLE dbo.<target_table_name> DROP CONSTRAINT <index_name> 
GO

ALTER TABLE dbo.<target_table_name> ADD CONSTRAINT <index_name> UNIQUE NONCLUSTERED (<col_1>, <col_2>, ..., <col_n>) 
GO
Mario Vázquez
quelle