SQL Server表DDL与可逆向JSON Schema互转实现及技术问询
SQL Server DDL与JSON Schema双向转换的工具及元数据存储方案
一、是否存在现成转换工具
目前没有完全覆盖SQL Server所有特性(如计算列、IDENTITY、DEFAULT约束等)的开箱即用通用工具,但可以通过以下方式实现双向转换:
- 利用SQL Server系统视图(
sys.tables、sys.columns、sys.computed_columns、sys.default_constraints等)提取完整表元数据,再通过脚本或手动映射为带扩展元数据的JSON Schema - 逆向转换时,解析JSON Schema中的扩展元数据,生成对应的
CREATE TABLE语句 - 若需快速搭建原型,可基于现有SQL元数据提取工具二次开发,补充JSON Schema的结构和扩展字段
二、JSON Schema中自定义元数据的存储位置
JSON Schema允许通过带命名空间前缀的自定义属性(通常用x-sql-*格式)存储SQL Server特有的元数据,既不会与标准JSON Schema关键字冲突,也能清晰标识元数据用途。结合你提供的示例DDL,对应的JSON Schema示例如下:
{ "$schema": "http://json-schema.org/draft-07/schema#", "title": "Customers", "type": "object", "x-sql-table-name": "Customers", "properties": { "Id": { "type": "integer", "x-sql-type": "INT", "x-sql-primary-key": true, "x-sql-identity": "(1, 1)" }, "FirstName": { "type": ["string", "null"], "x-sql-type": "NVARCHAR(50)", "x-sql-nullable": true }, "LastName": { "type": ["string", "null"], "x-sql-type": "NVARCHAR(50)", "x-sql-nullable": true }, "Full Name": { "type": "string", "x-sql-computed-column": true, "x-sql-computed-expression": "CONCAT(FirstName, ' ', LastName)", "x-sql-persisted": true }, "City": { "type": "string", "x-sql-type": "VARCHAR(MAX)", "x-sql-nullable": false }, "State": { "type": "string", "x-sql-type": "VARCHAR(50)", "x-sql-nullable": false, "x-sql-default": "'CO'" }, "SpecialRank": { "type": "number", "x-sql-type": "DECIMAL(18, 2)", "x-sql-nullable": false, "x-sql-default": "0" } } }
关键元数据存储说明:
- 顶层
x-sql-table-name:存储SQL表名 - 每个字段属性下的
x-sql-type:存储SQL原生数据类型(含长度、精度等参数) - 针对特殊特性的自定义字段:
x-sql-primary-key:标识主键x-sql-identity:存储IDENTITY种子和增量x-sql-computed-column/x-sql-computed-expression/x-sql-persisted:记录计算列的表达式及是否持久化x-sql-nullable:标识字段是否允许为空x-sql-default:存储默认值约束内容
内容的提问来源于stack exchange,提问作者Jerry Nixon
相关产品推荐
相关产品推荐

