Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come trovare il nome di un vincolo in SQL Server

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