SQLserver2019表1和表2对比出差异列,将表1的插入表2 写成存储过程,传的参为表名
两个表名一致,表结构可能不一致,可能一致,如何快速对比两个表,将需要的字段自动添加至需要的表中
字段大小是一致的吧
-- 连接到数据库
USE dbdemo;-- 创建临时表来存储差异列
CREATE TABLE #diff_columns (COLUMN_NAME NVARCHAR(100),DATA_TYPE NVARCHAR(100),CHARACTER_MAXIMUM_LENGTH INT
);-- 比较两个表的列,将差异列插入到临时表中
INSERT INTO #diff_columns
SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH
FROM (-- 表1中的差异列SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTHFROM INFORMATION_SCHEMA.COLUMNSWHERE TABLE_NAME = 'source_table1'AND COLUMN_NAME NOT IN (SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'source_table2')UNION ALL-- 表2中的差异列SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTHFROM INFORMATION_SCHEMA.COLUMNSWHERE TABLE_NAME = 'source_table2'AND COLUMN_NAME NOT IN (SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'source_table1')
) AS diff_columns;-- 在表2中添加差异列
DECLARE @alter_statements NVARCHAR(MAX) = '';SELECT @alter_statements = @alter_statements + 'ALTER TABLE source_table2 ADD ' + COLUMN_NAME + ' ' + DATA_TYPE +CASE WHEN CHARACTER_MAXIMUM_LENGTH IS NOT NULL THEN '(' + CAST(CHARACTER_MAXIMUM_LENGTH AS NVARCHAR(10)) + ')' ELSE '' END +';' + CHAR(13) + CHAR(10)
FROM #diff_columns;EXEC(@alter_statements);---- 插入表1的数据到表2中
--INSERT INTO source_table2 (column1, column2, column3, ...) -- 列出表1中的所有列名
--SELECT column1, column2, column3, ... -- 列出表1中的所有列名
--FROM table1;-- 删除临时表
DROP TABLE #diff_columns;
表1 结构 表2结构 执行后,表2结构更改