【发布时间】:2022-01-20 02:25:44
【问题描述】:
我正在尝试基于 SQL Server 架构生成 XML。我关注了一些参考资料,包括:(How to convert database table structure to XML file in sql server?)
经过反复试验,我已经做到了:
SELECT TABLE_NAME as '@tablename',
(
SELECT
DATA_TYPE as 'Column/@datatype',
case data_type
when 'nvarchar'
then CHARACTER_MAXIMUM_LENGTH
when 'varchar'
then CHARACTER_MAXIMUM_LENGTH
else null
end as 'Column/@Length',
case IS_NULLABLE
when 'NO' --caseinsensitive by default
then 'False'
when 'YES'
then 'True'
else null
end
AS 'Column/@is_nullable',
Column_Name as 'Column'
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
For XML Path, type
)
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA='dbo'
ORDER BY TABLE_NAME ASC
For XML PATH ('Table'),Root('Tables')
我得到的是:
<Tables>
<Table tablename="Table1">
<row>
<Column datatype="int" is_nullable="False">AA</Column>
</row>
<row>
<Column datatype="nvarchar" Length="50" is_nullable="True">Name</Column>
</row>
<row>
<Column datatype="bit" is_nullable="False">Active</Column>
</row>
<row>
<Column datatype="timestamp" is_nullable="False">CreatedDate</Column>
</row>
</Table>
<Table tablename="Table2">
<row>
<Column datatype="int" is_nullable="False">AA</Column>
</row>
<row>
<Column datatype="datetime2" is_nullable="True">CreatedDate</Column>
</row>
</Table>
</Tables>
预期的输出将具有以下结构。
<Tables>
<Table tablename="Table1">
<Columns>
<Column datatype="int" is_nullable="False">AA</Column>
<Column datatype="nvarchar" Length="50" is_nullable="True">Name</Column>
<Column datatype="bit" is_nullable="False">Active</Column>
<Column datatype="timestamp" is_nullable="False">CreatedDate</Column>
</Columns>
</Table>
<Table tablename="Table2">
<Columns>
<Column datatype="int" is_nullable="False">AA</Column>
<Column datatype="datetime" is_nullable="True">CreatedDate</Column>
<Columns>
</Table>
</Tables>
谁能解释一下
- 如何删除单个
<row></row>标签并替换为一组外部<columns></columns> - 如何将
datatype= datetime2更改为datatype= datetime
感谢您的帮助。
【问题讨论】:
标签: sql-server tsql schema for-xml-path