如何将一个表的列名及附加属性插入另一张表的行中
场景说明
现有两张表:
- 元数据表A,用于存储其他表的字段属性,结构如下:
Name IsNullable Datatype - 业务表B,包含
id、Stock、Power三个字段。
需要提取表B的所有列名,匹配对应字段的非空配置、数据类型后写入表A,最终表A的预期数据效果如下:
| Name | IsNullable | Datatype |
|---|---|---|
| id | False | int |
| Stock | False | float |
| Power | False | nvarchar |
实现方案
方法1:动态读取系统元数据(推荐,表B后续增减字段无需修改代码)
以SQL Server为例,直接查询系统内置的元数据视图批量插入即可,MySQL、PostgreSQL可替换为对应系统表查询逻辑:
INSERT INTO 表A (Name, IsNullable, Datatype) SELECT col.name AS Name, col.is_nullable AS IsNullable, typ.name AS Datatype FROM sys.tables tab JOIN sys.columns col ON tab.object_id = col.object_id JOIN sys.types typ ON col.user_type_id = typ.user_type_id WHERE tab.name = '表B'
如果需要统一指定属性(比如要求所有字段非空、手动指定字段类型),直接在查询语句中写固定值匹配即可:
INSERT INTO 表A (Name, IsNullable, Datatype) SELECT col.name AS Name, 0 AS IsNullable, -- 0对应False,1对应True CASE col.name WHEN 'id' THEN 'int' WHEN 'Stock' THEN 'float' WHEN 'Power' THEN 'nvarchar' END AS Datatype FROM sys.tables tab JOIN sys.columns col ON tab.object_id = col.object_id WHERE tab.name = '表B'
方法2:固定值插入(表结构长期不变的场景使用)
如果已经明确表B每个字段的属性,直接写定值插入语句即可:
INSERT INTO 表A (Name, IsNullable, Datatype) VALUES ('id', 'False', 'int'), ('Stock', 'False', 'float'), ('Power', 'False', 'nvarchar')
内容的提问来源于stack exchange,提问作者youngTalent
相关产品推荐
相关产品推荐

