sql >> データベース >  >> RDS >> Sqlserver

SQLServer2008の既存のデータベースからXMLスキーマを作成する方法

    テーブルの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を使用してテーブルの関係を取得します。名前を書き出すことを好む場合は、参照されている列とテーブルにさらに結合することもできますが、IDで十分だと思いました。



    1. Oracle SQLでトップ1を選択し、日付順に並べ替える方法は?

    2. Oracleのストアド関数が目的のテーブルに値を挿入しない

    3. '0000-00-0000:00:00'はjava.sql.Timestampエラーとして表すことができません

    4. 初心者向けのSQLCREATETABLE