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

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星尘库

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值