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.
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.
Antworten:
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:
In SQL Server Management Studio Express:
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 .
ALTER TABLE dbo.<tablename> ADD CONSTRAINT
<namingconventionconstraint> UNIQUE NONCLUSTERED
(
<columnname>
) ON [PRIMARY]
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.
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.
UNIQUE NONCLUSTERED
und Optionen PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON
?
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