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_LENGTH
FROM INFORMATION_SCHEMA.COLUMNS
WHERE 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_LENGTH
FROM INFORMATION_SCHEMA.COLUMNS
WHERE 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结构更改