Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Generating data dictionary for SQL Server database

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?

like image 601
Anthony Avatar asked Jun 27 '11 01:06

Anthony


People also ask

Does SQL Server have a data dictionary?

In SQL Server, the data dictionary is a set of database tables used to store information about a database's definition. & The dictionary contains information about database objects such as tables, indexes, columns, datatypes, and views.


2 Answers

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

like image 144
Bad Pitt Avatar answered Oct 04 '22 20:10

Bad Pitt


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

like image 31
mattmc3 Avatar answered Oct 04 '22 20:10

mattmc3