TekOnline

SQL Server Schema Extractor

Run this code against a db to get the table and col names:

SELECT 
    t.name AS TableName,
    s.name AS SchemaName,
    c.name AS ColumnName,
    typ.name AS DataType,
    c.max_length AS MaxLength,
    c.precision AS NumericPrecision,
    c.scale AS NumericScale,
    c.is_nullable AS IsNullable,
    CASE WHEN pk.column_id IS NOT NULL THEN 1 ELSE 0 END AS IsPrimaryKey,
    CASE WHEN fk.parent_column_id IS NOT NULL THEN 1 ELSE 0 END AS IsForeignKey,
    OBJECT_NAME(fk.referenced_object_id) AS ReferencedTable,
    COL_NAME(fk.referenced_object_id, fk.referenced_column_id) AS ReferencedColumn
FROM 
    sys.tables t
INNER JOIN 
    sys.schemas s ON t.schema_id = s.schema_id
INNER JOIN 
    sys.columns c ON t.object_id = c.object_id
INNER JOIN 
    sys.types typ ON c.user_type_id = typ.user_type_id
LEFT JOIN 
    sys.index_columns ic ON ic.object_id = c.object_id AND ic.column_id = c.column_id
LEFT JOIN 
    sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id AND i.is_primary_key = 1
LEFT JOIN 
    sys.index_columns pk ON pk.object_id = c.object_id AND pk.column_id = c.column_id AND pk.index_id IN (
        SELECT index_id FROM sys.indexes WHERE object_id = t.object_id AND is_primary_key = 1
    )
LEFT JOIN 
    sys.foreign_key_columns fk ON fk.parent_object_id = t.object_id AND fk.parent_column_id = c.column_id
ORDER BY 
    s.name, t.name, c.column_id


Posted

in

by

Tags:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *