La mayoria de las Bases de Datos tienen tablas de catálogos donde puedes consultar los nombres de tablas, los nombres de campos, los tipos, índices,....
En el caso de SQL server, como comentas, posee las tablas, sysColumns, sysObjects, sysIndexes,... (todas las que empiezan por sys)
Para saber los nombres de las tablas puedes ejecutar:
Código SQL
[-]
select * from sysobjects where xtype='U'
Para conocer todos los campos de todas las tablas:
Para obtener sólo los campos de una tabla:
Código SQL
[-]
select * from syscolumns inner join sysobjects on sysobjects.id=syscolumns.id
where sysobjects.xtype='U' and sysobjects.name='Monedas'
Si además quieres saber el tipo de cada campo, debes usar la tabla systypes:
Código SQL
[-]
select systypes.Name, syscolumns.* from syscolumns
inner join sysobjects on sysobjects.id=syscolumns.id
inner join systypes on systypes.xtype=syscolumns.xtype
where sysobjects.xtype='U' and sysobjects.name='tmoneda'
.. y así todo lo que necesites. El diccionario de datos varía de estructura segun el SGBD, pero son similares en todos, es cuestión de echare un vistazo y mirar la ayuda.