You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server 2019:批量更新TableB与TableA同名同类型列(带过滤)

快速生成SQL Server跨表更新脚本(匹配同名列)

针对SQL Server 2019中TableA和TableB(列名、数据类型完全一致)的批量更新需求,无需手动编写100列的SET语句,可通过系统视图自动生成符合要求的更新脚本:

自动生成脚本的SQL语句

DECLARE @TableNameA NVARCHAR(128) = 'TableA';
DECLARE @TableNameB NVARCHAR(128) = 'TableB';
DECLARE @JoinColumn NVARCHAR(128) = 'id';
DECLARE @FilterCondition NVARCHAR(MAX) = 'TableA.ModifiedOn > DATEADD(day, -1, GETDATE())';

-- 生成SET子句:自动匹配两表同名列(排除关联列)
DECLARE @SetClause NVARCHAR(MAX);
SELECT @SetClause = STRING_AGG(QUOTENAME(c.name) + ' = ' + QUOTENAME(@TableNameA) + '.' + QUOTENAME(c.name), ',
    ')
FROM sys.columns c
JOIN sys.tables t ON c.object_id = t.object_id
WHERE t.name = @TableNameA
AND c.name != @JoinColumn
AND EXISTS (
    SELECT 1
    FROM sys.columns c2
    JOIN sys.tables t2 ON c2.object_id = t2.object_id
    WHERE t2.name = @TableNameB
    AND c2.name = c.name
    AND c2.system_type_id = c.system_type_id -- 确保数据类型一致
);

-- 拼接完整UPDATE语句
DECLARE @UpdateScript NVARCHAR(MAX);
SET @UpdateScript = 'UPDATE ' + QUOTENAME(@TableNameB) + '
SET ' + @SetClause + '
FROM ' + QUOTENAME(@TableNameB) + '
JOIN ' + QUOTENAME(@TableNameA) + ' ON ' + QUOTENAME(@TableNameB) + '.' + QUOTENAME(@JoinColumn) + ' = ' + QUOTENAME(@TableNameA) + '.' + QUOTENAME(@JoinColumn) + '
WHERE ' + @FilterCondition;

-- 输出最终脚本
PRINT @UpdateScript;

使用说明

  1. 替换变量@TableNameA、@TableNameB为实际表名
  2. 确认@JoinColumn是两表的关联主键(此处为id)
  3. @FilterCondition可根据需求调整过滤逻辑(当前为近1天修改的数据)
  4. 执行该SQL后,会在消息窗口打印出完整的UPDATE脚本,包含所有同名列的SET赋值语句

内容的提问来源于stack exchange,提问作者Muhid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 14:04:56