Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

comment créer un schéma XML à partir d'une base de données existante dans SQL Server 2008

Si vous n'avez besoin que du schéma xml des tables, interrogez-les avec ceci :

select top 0 * FROM daTable FOR XML AUTO,XMLSCHEMA

Si vous avez besoin des noms de table et des colonnes pour créer une représentation de votre base de données et de la manière dont les tables sont connectées, vous pouvez utiliser quelque chose comme ceci :

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

Laissez votre application utiliser ColumnReferencesTableId et ColumnReferencesTableColumnId pour obtenir les relations de table. Vous pouvez également vous joindre aux colonnes et aux tables qui sont référencées si vous préférez écrire leurs noms, mais je pensais que leurs identifiants suffiraient.