如何编写SQL查询批量将源表列名复制到目标表
解决方法
首先明确你的需求场景,对应不同的实现方式:
场景1:将每个列名作为单独一行插入DestinationTable
你当前的SQL语句其实已经实现了一次性插入所有列名的效果——它会查询出SourceTable的所有列名,并批量插入到DestinationTable的ColumnName列中,每行对应一个列名,无需手动逐个操作。
如果执行后未达到预期,可能是未指定表架构导致查询到同名表,补充架构名可确保准确性:
INSERT INTO dbo.DestinationTable (ColumnName) SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.Columns WHERE TABLE_NAME = 'SourceTable' AND TABLE_SCHEMA = 'dbo'; -- 指定表所属架构,避免同名表干扰
场景2:将所有列名合并为单个字符串(如逗号分隔)插入单行
如果需要把所有列名合并成一个字符串(例如col1, col2, col3)插入到DestinationTable的某一行,需使用对应数据库的字符串聚合函数:
适用于SQL Server:
INSERT INTO dbo.DestinationTable (ColumnName) SELECT STRING_AGG(COLUMN_NAME, ', ') -- 用逗号分隔列名 FROM INFORMATION_SCHEMA.Columns WHERE TABLE_NAME = 'SourceTable' AND TABLE_SCHEMA = 'dbo';
适用于MySQL:
INSERT INTO DestinationTable (ColumnName) SELECT GROUP_CONCAT(COLUMN_NAME SEPARATOR ', ') -- 用逗号分隔列名 FROM INFORMATION_SCHEMA.Columns WHERE TABLE_NAME = 'SourceTable' AND TABLE_SCHEMA = 'your_database_name'; -- 替换为你的数据库名
内容的提问来源于stack exchange,提问作者iamstilllearning
相关产品推荐
相关产品推荐

