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

Sådan finder du navnet på en begrænsning i SQL Server

Problem:

Du ønsker at finde navnene på begrænsningerne i en tabel i SQL Server.

Eksempel:

Vi ønsker at vise navnene på begrænsningerne i tabellen student .

Løsning:

SELECT TABLE_NAME,
       CONSTRAINT_TYPE,CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE TABLE_NAME=’student’;

Her er resultatet:

TABLE_NAME CONSTRAINT_TYPE CONSTRAINT_NAME
elev PRIMÆR NØGLE PK__student__3213E83F357C7D1D
elev UNIKK UQ__student__24E2EDD2AC2A7D87
elev TJEK CK__student__age__4E88ABD4
elev UDLANDS NØGLE FK__student__country__4F7CD00D

Diskussion:

Brug visningen table_constraints i information_schema skema. Kolonnen table_name giver dig navnet på den tabel, hvori begrænsningen er defineret, og kolonnen constraint_name indeholder navnet på begrænsningen. Kolonnen constraint_type angiver typen af ​​begrænsning:PRIMARY KEY for den primære nøgletype, FOREIGN KEY for fremmednøgletypen UNIQUE for de unikke værdier og CHECK for begrænsningskontrollen.

For eksempel den primære nøgle i student tabellen har begrænsningsnavnet PK_student_3213E83F357C7D1D . constraint_type kolonne giver dig information om typen af ​​hver begrænsning; for den primære nøgle er det PRIMARY KEY . table_name kolonne i denne visning angiver, hvilken tabel der indeholder denne begrænsning.

Men hvis du vil vælge DEFAULT begrænsning fra en database, brug denne forespørgsel nedenfor.

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';

Her er resultatet:

navn definition
DF__student__name__4D94879B ("ukendt")

Navnet på DEFAULT begrænsning er gemt i kolonnenavnet, men værdien er i kolonnen definition . Deltager i visningerne sys.default_constraint s og sys.objects giver os mulighed for kun at vælge data for en given tabel (i vores eksempel tabellen student ) med brug af WHERE-sætning. Begrænsningsnavnet indeholder navnet på tabellen (student ) og navnet på kolonnen (name ).


  1. Implementering af et certifikat til krypteret forbindelse SQL Server

  2. konverter MySQL SET datatype til Postgres

  3. Er en CASE-sætning og en DECODE ækvivalente?

  4. Hvad er det dobbelte bord i Oracle?