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

无需链接服务器/导入工具,用T-SQL脚本导入Excel/CSV至SQL Server

无需特殊组件导入Excel/CSV到SQL Server的T-SQL方案

当然有办法实现!不过得区分CSV和Excel两种情况来处理,毕竟它们的文件格式差异很大,纯T-SQL的实现方式也有所不同:

一、CSV文件导入(纯T-SQL脚本)

CSV是纯文本格式,我们可以借助xp_cmdshell读取文件内容,再解析插入目标表。不过要注意,xp_cmdshell默认是禁用的,需要先开启(需要管理员权限)。

步骤1:启用xp_cmdshell

-- 开启高级选项
sp_configure 'show advanced options', 1;
RECONFIGURE;
-- 启用xp_cmdshell
sp_configure 'xp_cmdshell', 1;
RECONFIGURE;

步骤2:读取CSV内容到临时表

替换下面的文件路径为你的实际CSV路径,如果CSV有表头,记得在后续步骤中移除:

-- 创建临时表存储CSV的每行数据
CREATE TABLE #CSVData (RowData NVARCHAR(MAX));

-- 读取CSV文件内容到临时表
INSERT INTO #CSVData
EXEC xp_cmdshell 'type "C:\YourFiles\sample_data.csv"';

-- 清理空行和表头(如果你的CSV包含表头,替换引号内的内容为你的表头行)
DELETE FROM #CSVData 
WHERE RowData IS NULL OR RowData = 'ID,Name,Email';

步骤3:解析CSV并插入目标表

假设你的目标表是dbo.UserData,包含ID, Name, Email三列,我们可以通过字符串函数拆分每行数据:

-- 解析每行数据并插入目标表
INSERT INTO dbo.UserData (ID, Name, Email)
SELECT
    -- 提取第一列(ID)
    TRIM(SUBSTRING(RowData, 1, CHARINDEX(',', RowData) - 1)) AS ID,
    -- 提取第二列(Name)
    TRIM(SUBSTRING(
        RowData, 
        CHARINDEX(',', RowData) + 1, 
        CHARINDEX(',', RowData, CHARINDEX(',', RowData) + 1) - CHARINDEX(',', RowData) - 1
    )) AS Name,
    -- 提取第三列(Email,假设是最后一列)
    TRIM(SUBSTRING(
        RowData, 
        CHARINDEX(',', RowData, CHARINDEX(',', RowData) + 1) + 1, 
        LEN(RowData)
    )) AS Email
FROM #CSVData;

-- 清理临时表
DROP TABLE #CSVData;

注意事项

  • 如果你的CSV包含带引号的字段(比如字段内容里有逗号),上面的简单拆分逻辑会失效,这时需要写一个更复杂的自定义拆分函数(比如用递归CTE或者正则表达式来处理)。
  • 使用完xp_cmdshell后建议关闭它,降低安全风险:
-- 关闭xp_cmdshell
sp_configure 'xp_cmdshell', 0;
RECONFIGURE;
-- 关闭高级选项
sp_configure 'show advanced options', 0;
RECONFIGURE;

二、Excel文件导入的替代方案

Excel是二进制格式,纯T-SQL没有原生能力直接解析它(毕竟Excel的格式太复杂了)。如果不能用链接服务器、OPENROWSET这些组件,我们可以先把Excel转成CSV,再用上面的CSV方案导入。

用PowerShell转Excel为CSV(通过xp_cmdshell调用)

需要先在服务器上安装PowerShell的ImportExcel模块(可以通过Install-Module ImportExcel命令安装),然后执行:

-- 调用PowerShell将Excel转成CSV
EXEC xp_cmdshell 'powershell -Command "Import-Module ImportExcel; Import-Excel -Path ''C:\YourFiles\sample_data.xlsx'' -ExportPath ''C:\YourFiles\converted_data.csv'' -NoHeader"'

转换完成后,就可以用前面的CSV导入脚本处理生成的CSV文件了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:32:49