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 ).