Ако имате нужда само от xml схемата на таблиците, потърсете ги с това:
select top 0 * FROM daTable FOR XML AUTO,XMLSCHEMA
Ако имате нужда от имената и колоните на таблиците, за да създадете представяне на вашата база данни и как таблиците са свързани, можете да използвате нещо подобно:
SELECT
s.name as '@Schema'
,t.name as '@Name'
,t.object_id as '@Id'
,(
SELECT c.name as '@Name'
,c.column_id as '@Id'
,IIF(ic.object_id IS NOT NULL,1,0) as '@IsPrimaryKey'
,fkc.referenced_object_id as '@ColumnReferencesTableId'
,fkc.referenced_column_id as '@ColumnReferencesTableColumnId'
FROM sys.columns as c
LEFT OUTER JOIN sys.index_columns as ic
ON c.object_id = ic.object_id
AND c.column_id = ic.column_id
AND ic.index_id = 1
LEFT OUTER JOIN sys.foreign_key_columns as fkc
ON c.object_id = fkc.parent_object_id
AND c.column_id = fkc.parent_column_id
WHERE c.object_id = t.object_id
FOR XML PATH ('Column'),TYPE
)
FROM sys.schemas as s
INNER JOIN sys.tables as t
ON s.schema_id = t.schema_id
FOR XML PATH('Table'),ROOT('Tables')
Позволете на вашето приложение да използва ColumnReferencesTableId и ColumnReferencesTableColumnId, за да получи релации на таблица. Можете също така да се присъедините допълнително към колони и таблици, които са посочени, ако предпочитате да изпишете имената им, но реших, че техните идентификатори ще са достатъчни.