Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So erstellen Sie ein XML-Schema aus einer vorhandenen Datenbank in SQL Server 2008

Wenn Sie nur das XML-Schema von Tabellen benötigen, fragen Sie sie hiermit ab:

select top 0 * FROM daTable FOR XML AUTO,XMLSCHEMA

Wenn Sie die Tabellennamen und Spalten benötigen, um eine Darstellung Ihrer Datenbank zu erstellen und wie Tabellen verbunden sind, können Sie so etwas verwenden:

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')

Lassen Sie Ihre Anwendung ColumnReferencesTableId und ColumnReferencesTableColumnId verwenden, um Tabellenbeziehungen abzurufen. Sie könnten auch weiter zu Spalten und Tabellen zurückverknüpfen, auf die verwiesen wird, wenn Sie es vorziehen, ihre Namen auszuschreiben, aber ich dachte, ihre IDs würden ausreichen.