数据库表1和表2对比出差异列 将表1的插入表2

2023-12-14 15:32:07

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结构更改

?

文章来源:https://blog.csdn.net/qq_28821897/article/details/134994368
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。