Technical Article

List All Constraints

,

These four scripts list concise information about all Default, Check, Unique, Foreign Key, and Primary Key constraints for the database in which they are run.  With minor column modifications, they could easily be unioned to provide a single list.

The usual caveat applies about directly accessing system tables. They may change in future versions and/or service packs.

/*
sqryConstraints

Created by Larry Ansley 6/10/03.

*/
-- Unique Constraints
Select
Case o1.xtype
When 'C' Then 'Check'
When 'D' Then 'Default'
When 'F' Then 'Foreign Key'
When 'PK' Then 'Primary Key'
When 'UQ' Then 'Unique'
Else 'Other' End as 'Constraint Type',
o.name as 'Table Name',
o1.name as 'Constraint/Index Name',
c1.name as 'Column Name',
k.keyno as 'KeyNo'
From sysobjects o
Join sysobjects o1
on o1.Parent_obj = o.id
Join sysconstraints c
on c.constid = o1.id
Join sysindexes i
on i.id = o.id
and i.name = o1.name
Join sysindexkeys k
on k.id = i.id
and k.indid = i.indid
Join syscolumns c1
on c1.id = k.id
and c1.colid = k.colid
Where o1.xtype = 'UQ'
Order By o.name, o1.name, k.KeyNo


-- Check, Default Constraints
Select
Case o1.xtype
When 'C' Then 'Check'
When 'D' Then 'Default'
When 'F' Then 'Foreign Key'
When 'PK' Then 'Primary Key'
When 'UQ' Then 'Unique'
Else 'Other' End as 'Constraint Type',
o.name as 'Table Name',
o1.name as 'Constraint Name',
c1.name as 'Column Name',
c.text as 'Default/Check Value'
From sysobjects o
Join sysobjects o1
on o1.Parent_obj = o.id
Join syscolumns c1
on c1.id = o1.parent_obj
and c1.colid = o1.info
Join syscomments c
on o1.id = c.id
Where o1.xtype In ('C' , 'D')
Order By o1.xtype, o.name, c1.name


-- Foreign Key Constraints
Select
Case o1.xtype
When 'C' Then 'Check'
When 'D' Then 'Default'
When 'F' Then 'Foreign Key'
When 'PK' Then 'Primary Key'
When 'UQ' Then 'Unique'
Else 'Other' End as 'Constraint Type',
o1.name as 'Constraint Name',
o.name as 'FK Table Name',
c1.name as 'FK Column Name',
c2.name as 'PK Column Name',
o2.name as 'PK Table Table',
fk.keyno as 'KeyNo'
From sysobjects o
Join sysobjects o1
on o1.Parent_obj = o.id
Join sysforeignkeys fk
on fk.constid = o1.id
Join sysobjects o2
on o2.id = fk.rkeyid
Left Join syscolumns c1
 on c1.id = fk.fkeyid
 and c1.colid = fk.fkey
Left Join syscolumns c2
 on c2.id = fk.rkeyid
 and c2.colid = fk.rkey
Where o1.xtype = 'F'
Order By o.name, o2.name, fk.keyno


-- Primary Key Constraints
Select
Case o1.xtype
When 'C' Then 'Check'
When 'D' Then 'Default'
When 'F' Then 'Foreign Key'
When 'PK' Then 'Primary Key'
When 'UQ' Then 'Unique'
Else 'Other' End as 'Constraint Type',
o1.name as 'Constraint Name',
o.name as 'PK Table Name',
c1.name as 'PK Column Name',
c2.name as 'FK Column Name',
o2.name as 'FK Table',
fk.keyno as 'KeyNo'
From sysobjects o
Join sysobjects o1
on o1.Parent_obj = o.id
Join sysforeignkeys fk
on fk.rkeyid = o.id
Join sysobjects o2
on o2.id = fk.fkeyid
Left Join syscolumns c1
 on c1.id = fk.rkeyid
 and c1.colid = fk.rkey
Left Join syscolumns c2
 on c2.id = fk.rkeyid
 and c2.colid = fk.rkey
Where o1.xtype = 'PK'
Order By o.name, o2.name, fk.keyno

Rate

You rated this post out of 5. Change rating

Share

Share

Rate

You rated this post out of 5. Change rating