10

I am trying to generate a data dictionary for a table in my database.

Ideally I would like to export the column names, data type, restrictions and extended property descriptions.

How can this be achieved?

p.campbell
  • 98,673
  • 67
  • 256
  • 322
Anthony
  • 249
  • 1
  • 5
  • 15

4 Answers4

13

You can try this query:

SELECT
    IC.COLUMN_NAME,
    IC.Data_TYPE,
    EP.[Value] as [MS_Description],
    IKU.CONSTRAINT_NAME, 
    ITC.CONSTRAINT_TYPE,
    IC.IS_NULLABLE
 FROM
    INFORMATION_SCHEMA.COLUMNS IC
    INNER JOIN sys.columns sc ON OBJECT_ID(QUOTENAME(IC.TABLE_SCHEMA) + '.' + QUOTENAME(IC.TABLE_NAME)) = sc.[object_id] AND IC.COLUMN_NAME = sc.name
    LEFT OUTER JOIN sys.extended_properties EP ON sc.[object_id] = EP.major_id AND sc.[column_id] = EP.minor_id AND EP.name = 'MS_Description' AND EP.class = 1 
    LEFT OUTER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE IKU ON IKU.COLUMN_NAME = IC.COLUMN_NAME and IKU.TABLE_NAME = IC.TABLE_NAME and IKU.TABLE_CATALOG = IC.TABLE_CATALOG
    LEFT OUTER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS ITC ON ITC.TABLE_NAME = IKU.TABLE_NAME and ITC.CONSTRAINT_NAME = IKU.CONSTRAINT_NAME
WHERE IC.TABLE_CATALOG = 'Database'
  and IC.TABLE_SCHEMA = 'dbo'
  and IC.TABLE_NAME = 'Table'
order by IC.ORDINAL_POSITION

or schema documentation generator like Dataedo (which I am the Product Manager of).

Matthieu M.
  • 287,565
  • 48
  • 449
  • 722
Bad Pitt
  • 524
  • 1
  • 6
  • 15
9

You can get at this via a combination of SELECT * FROM INFORMATION_SCHEMA.COLUMNS and using fn_listextendedproperty.

mattmc3
  • 17,595
  • 7
  • 83
  • 103
0

To generate a data dictionary of your SQL Server database, I suggest you use ERBuilder data modeller, just follow these steps:

To generate an ER diagram it is necessary to first, reverse engineer your database select: Menu -> File -> Reverse Engineer the ER diagram will be displayed in ERBuilder. To generate a data dictionary of your database select: Menu -> Tool -> Generate model documentation

parash
  • 21
  • 3
0

Since this is the first search result for 'mssql data dictionary', here's a simple query to get the list of tables and columns in a db -

select table_name, ordinal_position, column_name, data_type 
from information_schema.columns 
order by table_name, ordinal_position;

giving eg

"table_name","ordinal_position","column_name","data_type"
Account,1,Account,varchar
Account,2,Type,varchar
Account,3,Description,varchar
Account,4,Rollup_Account,varchar
Account,5,Last_Updated,datetime
Account,6,Section_Name,varchar
Account,7,QB_ID,varchar
Additional_Charge,1,Additional_ChargeKey,int
Additional_Charge,2,Additional_Charge,int
...
Brian Burns
  • 20,575
  • 8
  • 83
  • 77