SQLServerで列の一覧はすぐとれるんだけど、主キーかどうかわからない。なので主キーかどうかのフラグを一緒につけたい場合は↓の感じ。
select X.name as tablename ,Y.object_id ,Y.name ,Y.column_id ,Y.system_type_id ,Y.max_length ,Y.is_nullable ,Y.is_identity ,isnull(Z.is_primary_key,0) as is_primary_key from ( select * from sys.tables where type = 'U' ) as X inner join ( select * from sys.columns ) as Y on X.object_id = Y.object_id left join ( select X.object_id,Y.column_id,Z.is_primary_key from sys.columns as X inner join sys.index_columns as Y on X.object_id = Y.object_id and X.column_id = Y.column_id inner join sys.indexes as Z on Y.object_id = Z.object_id and Y.index_id = Z.index_id where Z.is_primary_key = 1 ) as Z on Y.object_id = Z.object_id and Y.column_id = Z.column_id
もっといい感じに書けると思うけど、ちょっとやっつけ。