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?
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?
You can get at this via a combination of SELECT * FROM INFORMATION_SCHEMA.COLUMNS
and using fn_listextendedproperty
.
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).
You can get at this via a combination of SELECT * FROM INFORMATION_SCHEMA.COLUMNS
and using fn_listextendedproperty
.
ORA-00942: table or view does not exist
–
Fem 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
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
...
This query (adapted from Bad Pit
's answer) gives all the 'dbo' tables in your database (named 'myDatabaseName'):
declare @DBNAME varchar(128) ='myDatabaseName'; -- put your database name here
SELECT
concat(IC.TABLE_NAME, '.', IC.COLUMN_NAME, ' (', ic.DATA_TYPE, ')', (case(itc.constraint_type) when('PRIMARY KEY') then (' PRIMARY KEY') else ('') end), (case(ic.IS_NULLABLE) when('YES') then (' NULLABLE') else ('') end)) as 'Data Dictionary'
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 = @DBNAME
and IC.TABLE_SCHEMA = 'dbo'
order by IC.TABLE_NAME, IC.ORDINAL_POSITION
;```
© 2022 - 2025 — McMap. All rights reserved.
ORA-00942: table or view does not exist
– Fem