SQL Server 2005 Come creare un vincolo univoco?


181

Come posso creare un vincolo univoco su una tabella esistente in SQL Server 2005?

Sto cercando sia il TSQL sia come farlo nel diagramma del database.

Risposte:


272

Il comando SQL è:

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

Vedi la sintassi completa qui .

Se si desidera farlo da un diagramma del database:

  • fare clic con il tasto destro del mouse sulla tabella e selezionare "Indici / Chiavi"
  • fai clic sul pulsante Aggiungi per aggiungere un nuovo indice
  • inserisci le informazioni necessarie nelle Proprietà sul lato destro:
    • le colonne desiderate (fare clic sul pulsante con i puntini di sospensione per selezionare)
    • set È univoco su Sì
    • dagli un nome appropriato

1
Funziona ... ma ... perché il vincolo viene mostrato nella cartella INDEX anziché nella cartella CONSTRAINTS. Viene mostrato con un'altra icona, ma dovrebbe comunque trovarsi nella cartella dei vincoli.
Fernando Torres,

84

In SQL Server Management Studio Express:

  • Fare clic con il tasto destro del mouse sulla tabella, selezionare Modifica o Progetta (per versioni successive)
  • Campo del tasto destro del mouse, selezionare indici / chiavi ...
  • Clicca Aggiungi
  • Per le colonne , selezionare il nome del campo che si desidera essere univoco.
  • Per Tipo , selezionare Chiave unica .
  • Fai clic su Chiudi , salva la tabella.

29
ALTER TABLE [TableName] ADD CONSTRAINT  [constraintName] UNIQUE ([columns])

15

Avviso: nella colonna che hai impostato come unico può essere presente solo una riga nulla.

Puoi farlo con un indice filtrato in SQL 2008:

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

Vedere Il valore del campo deve essere univoco a meno che non sia NULL per un intervallo di risposte.


come si fa in SQL Server 2005?
Maxrunner,

2
Non è realizzabile in SQL Server 2005. Consiglio vivamente l'aggiornamento a un RDBMS più aggiornato - sarà ufficialmente non supportato a partire dal 12 aprile 2016.
reedstonefood

13
ALTER TABLE dbo.<tablename> ADD CONSTRAINT
            <namingconventionconstraint> UNIQUE NONCLUSTERED
    (
                <columnname>
    ) ON [PRIMARY]

10

Ho anche scoperto che puoi farlo tramite gli schemi del database.

Facendo clic con il tasto destro del mouse sulla tabella e selezionando Indici / Tasti ...

Fai clic sul pulsante "Aggiungi" e modifica le colonne nelle colonne che desideri rendere uniche.

Il cambiamento è univoco su Sì.

Fai clic su chiudi e salva il diagramma e lo aggiungerà alla tabella.


8

Stai cercando qualcosa di simile al seguente

ALTER TABLE dbo.doc_exz
ADD CONSTRAINT col_b_def
UNIQUE column_b

Documenti MSDN


6

Per creare un vincolo UNIQUE su una o più colonne quando la tabella è già stata creata, utilizzare il seguente SQL:

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

Per consentire la denominazione di un vincolo UNIQUE per la query precedente

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

La query supportata da MySQL / SQL Server / Oracle / MS Access.


UNIQUE NONCLUSTERED e opzioni PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON ?
Kiquenet,

5

Nel diagramma di Management Studio scegli la tabella, fai clic con il pulsante destro del mouse per aggiungere una nuova colonna, se lo desideri, fai clic con il pulsante destro del mouse sulla colonna e scegli "Controlla vincoli", lì puoi aggiungerne uno.


0

In alcune situazioni, potrebbe essere desiderabile assicurarsi che la chiave unica non esista prima di crearla. In questi casi, lo script seguente potrebbe aiutare:

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.