3

テーブル スキーマを XML 形式に変換するにはどうすればよいですか? 以下にフォーマットを示します。

<Tables>
  <Table>
    <Name>courses</Name>
    <Schema>dbo</Schema>
    <Columns>
      <Column>
        <Name>id</Name>
        <DataType>int</DataType>
     </Column>
     <Column>
       <Name>page_name</Name>
       <DataType>nvarchar</DataType>
       <Length>50</Length>
     </Column>
    </Columns>
  </Table>
  <Table>
    <Name>course_details</Name>
    <Schema>dbo</Schema>
    .....
    .....
  </Table>
</Tables>

列とテーブルの構造を別々に生成できます。しかし、私は両方を統合したいと考えています。それはどのように可能ですか?私の SQL スクリプト

テーブルの場合:

SELECT
Distinct
TABLE_NAME as Name,
TABLE_SCHEMA as [Schema]
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA='dbo'
ORDER BY TABLE_NAME ASC
For XML PATH ('Table'),
Root('Tables')

列の場合:

SELECT
Column_Name as Name,
DATA_TYPE as DataType,
CHARACTER_MAXIMUM_LENGTH as [Length]
FROM INFORMATION_SCHEMA.COLUMNS
For XML PATH ('Column'),
Root('Columns')
4

2 に答える 2

4

同じクエリですが、見栄えが良くなります。

SELECT TABLE_NAME as '@Name',        
(
    SELECT Column_Name as '@Name',
            DATA_TYPE as '@DataType',
            case data_type 
                when 'nvarchar' 
                then CHARACTER_MAXIMUM_LENGTH 
                when 'varchar'  
                then CHARACTER_MAXIMUM_LENGTH
                else null 
            end  as '@Length',
            IS_NULLABLE AS '@IsNullable'

    FROM INFORMATION_SCHEMA.COLUMNS 
    where INFORMATION_SCHEMA.COLUMNS.TABLE_NAME = 
        INFORMATION_SCHEMA.TABLES.TABLE_NAME
    order by INFORMATION_SCHEMA.COLUMNS.ORDINAL_POSITION
    For XML PATH ('Column'), type
)

FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA='dbo'
ORDER BY TABLE_NAME ASC  
For XML PATH ('Table'),Root('Tables')
于 2012-10-09T17:15:16.327 に答える
2

FOR XML PATHのTYPEパラメータを使用する必要があります。次の
ようなものです。

SELECT  TABLE_NAME      as name,
        TABLE_SCHEMA    as [schema],
        (
            SELECT Column_Name as Name,
                    DATA_TYPE as DataType,
                    CHARACTER_MAXIMUM_LENGTH as [Length]
            FROM INFORMATION_SCHEMA.COLUMNS
            For XML PATH ('Column'),root('columns'), type
        )
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA='dbo'
ORDER BY TABLE_NAME ASC
For XML PATH ('Table'),Root('Tables')
于 2012-07-18T15:14:28.203 に答える