Problema:
Vuoi trovare i nomi dei vincoli in una tabella in SQL Server.
Esempio:
Vogliamo visualizzare i nomi dei vincoli nella tabella student
.
Soluzione:
SELECT TABLE_NAME, CONSTRAINT_TYPE,CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME=’student’;
Ecco il risultato:
TABLE_NAME | TIPO_VINCENTE | CONSTRAINT_NAME |
---|---|---|
studente | CHIAVE PRIMARIA | PK__studente__3213E83F357C7D1D |
studente | UNICO | UQ__studente__24E2EDD2AC2A7D87 |
studente | CONTROLLA | CK__student__age__4E88ABD4 |
studente | CHIAVE ESTERA | FK__student__country__4F7CD00D |
Discussione:
Usa la vista table_constraints
nel information_schema
schema. La colonna table_name
fornisce il nome della tabella in cui è definito il vincolo e la colonna constraint_name
contiene il nome del vincolo. La colonna constraint_type
indica il tipo di vincolo:PRIMARY KEY
per il tipo di chiave primaria, FOREIGN KEY
per il tipo di chiave esterna, UNIQUE
per i valori univoci e CHECK
per il controllo del vincolo.
Ad esempio, la chiave primaria nello student
la tabella ha il nome del vincolo PK_student_3213E83F357C7D1D
. Il constraint_type
la colonna fornisce informazioni sul tipo di ogni vincolo; per la chiave primaria, è PRIMARY KEY
. Il table_name
la colonna in questa vista indica quale tabella contiene questo vincolo.
Tuttavia, se desideri selezionare il DEFAULT
vincolo da un database, utilizza questa query di seguito.
SELECT c.name, c.definition FROM sys.default_constraints c JOIN sys.objects o ON o.object_id = c.parent_object_id WHERE o.name ='student';
Ecco il risultato:
nome | definizione |
---|---|
DF__student__name__4D94879B | ("sconosciuto") |
Il nome del DEFAULT
il vincolo è memorizzato nel nome della colonna, ma il valore è nella colonna definition
. Unire le viste sys.default_constraint
se sys.objects
permette di selezionare solo i dati di una determinata tabella (nel nostro esempio la tabella student
) con l'utilizzo della clausola WHERE. Il nome del vincolo contiene il nome della tabella (student
) e il nome della colonna(name
).