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

如何通过上传XLSX/CSV更新SQL Server现有数据表?

如何通过CSV/XLSX更新SQL Server现有表

方法1:调整导入和导出向导的默认设置(适合手动每月操作)

你之前用「任务→导入数据」时,默认逻辑是追加数据或新建表,而非更新现有行,按以下步骤修改即可:

  1. 启动导入向导,选择Excel/CSV作为数据源,完成文件路径、表头设置后进入「选择目标」步骤,确认目标为需要更新的现有表。
  2. 在「指定表复制或查询」步骤,选中「复制一个或多个表或视图的数据」,点击「编辑映射」。
  3. 在映射窗口中,若表有自增主键需勾选「启用标识插入」,接着点击「转换」按钮,将「目标」的「操作」选项改为更新(必须保证源数据和目标表有匹配的主键/唯一键,否则无法定位更新行)。
  4. 完成后续配置后执行,此时向导会根据匹配键更新现有数据,同时可选择是否追加新增行。

方法2:用MERGE语句结合OPENROWSET/BULK INSERT(适合精准控制更新逻辑)

如果需要自定义更新/插入规则(比如更新匹配行、插入新行),可以用SQL语句直接读取文件并同步:

针对Excel文件:

先启用Ad Hoc分布式查询(仅需执行一次):

sp_configure 'show advanced options', 1;
RECONFIGURE;
sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;

再通过MERGE同步数据(假设目标表为dbo.TargetTable,Excel工作表为Sheet1$,匹配键为ID):

MERGE INTO dbo.TargetTable AS Target
USING (
    SELECT ID, Column1, Column2
    FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
                    'Excel 12.0 Xml;HDR=YES;Database=C:\YourUpdateFile.xlsx',
                    'SELECT * FROM [Sheet1$]')
) AS Source ON Target.ID = Source.ID
WHEN MATCHED THEN
    UPDATE SET Target.Column1 = Source.Column1,
               Target.Column2 = Source.Column2
WHEN NOT MATCHED THEN
    INSERT (ID, Column1, Column2)
    VALUES (Source.ID, Source.Column1, Source.Column2);

针对CSV文件:

先将CSV导入临时表,再用MERGE同步:

-- 创建与目标表结构一致的临时表
CREATE TABLE #TempTable (
    ID INT,
    Column1 VARCHAR(50),
    Column2 INT
)

-- 导入CSV数据
BULK INSERT #TempTable
FROM 'C:\YourUpdateFile.csv'
WITH (
    FIELDTERMINATOR = ',',  -- CSV列分隔符
    ROWTERMINATOR = '\n',   -- 行分隔符
    FIRSTROW = 2,           -- 跳过表头行
    CODEPAGE = '65001'      -- 含中文时用UTF-8编码
)

-- 同步到目标表
MERGE INTO dbo.TargetTable AS Target
USING #TempTable AS Source ON Target.ID = Source.ID
WHEN MATCHED THEN
    UPDATE SET Target.Column1 = Source.Column1,
               Target.Column2 = Source.Column2
WHEN NOT MATCHED THEN
    INSERT (ID, Column1, Column2)
    VALUES (Source.ID, Source.Column1, Source.Column2);

-- 清理临时表
DROP TABLE #TempTable

方法3:创建SSIS包(适合自动化每月更新)

如果需要后续定时自动执行,可通过SSIS实现:

  1. 打开SQL Server Data Tools(SSDT),新建Integration Services项目。
  2. 添加「Excel源」/「平面文件源」(对应CSV)和「OLE DB目标」组件,配置数据源路径和目标表。
  3. 在数据流向中添加「查找」组件,用主键/唯一键关联源数据和目标表,区分出匹配行(需更新)和未匹配行(需插入)。
  4. 对匹配行用「OLE DB命令」执行UPDATE语句,未匹配行直接插入目标表。
  5. 保存包后,可手动执行或通过SQL Server Agent设置每月定时任务。

注意事项

  • 确保源文件的列名、数据类型与目标表完全匹配,避免转换错误。
  • 必须有唯一匹配键(如主键),否则无法精准定位需要更新的行。
  • 使用Excel文件时,服务器需安装对应版本的Microsoft Access Database Engine(ACE驱动)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 15:10:05