sql >> Database teknologi >  >> RDS >> Sqlserver

hvordan man opretter XML-skema fra en eksisterende database i SQL Server 2008

Hvis du kun har brug for xml-skemaet for tabeller, forespørg dem med dette:

select top 0 * FROM daTable FOR XML AUTO,XMLSCHEMA

Hvis du har brug for tabelnavne og kolonner for at skabe en repræsentation af din database og hvordan tabeller er forbundet, kan du bruge noget som dette:

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

Lad din applikation bruge ColumnReferencesTableId og ColumnReferencesTableColumnId til at få tabelrelationer. Du kan også gå tilbage til kolonner og tabeller, som der henvises til, hvis du foretrækker at skrive deres navne ud, men jeg troede, at deres id'er ville være tilstrækkelige.



  1. Kommaseparerede værdier i Oracle

  2. MySQL Vælg række med laveste værdi i kolonne

  3. specifik mysql-opdatering baseret på gruppe efter data

  4. Brug PHP til at dumpe mysql-værdier i JSON-filen