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

如何通过ADODB将Excel多行单元格导入SQL Server 2016并保留换行格式

解决方案

问题根源

Excel中通过Alt+Enter输入的硬换行符是vbLf(ASCII码10),SQL Server本身支持存储该类特殊控制字符,出现换行丢失的问题通常是导入方式处理不当或读取后展示配置错误导致的。

前置检查

首先确认SQL Server中存储备注的字段类型为nvarchar(max)或varchar(max),禁止使用长度不足的定长字符类型(如char(n)、短长度varchar(n)),避免特殊字符被截断或清理。

可行导入方案

方案1:记录集赋值(优先推荐)

该方式为ADO原生传值,不会转义特殊字符,不需要额外处理换行符即可完整保留格式:

' 需先引用Microsoft ActiveX Data Objects x.x Library
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
' 数据库连接自行替换为实际配置
conn.Open "Provider=SQLOLEDB;Data Source=你的实例名;Initial Catalog=你的库名;User ID=账号;Password=密码;"
' 打开空记录集
rs.Open "SELECT comment FROM comment_table WHERE 1=2", conn, adOpenKeyset, adLockOptimistic
rs.AddNew
' 注意取单元格的.Value属性,禁止用.Text属性
rs!comment = Range("A1").Value ' 替换为实际备注单元格位置
rs.Update
' 释放资源
rs.Close
conn.Close
Set rs = Nothing
Set conn = Nothing

方案2:参数化插入(安全稳妥)

如果需要直接执行SQL语句,不要用字符串拼接的方式,改用参数化查询,完全避免特殊字符转义问题:

Dim conn As New ADODB.Connection
Dim cmd As New ADODB.Command
conn.Open "Provider=SQLOLEDB;Data Source=你的实例名;Initial Catalog=你的库名;User ID=账号;Password=密码;"
Set cmd.ActiveConnection = conn
cmd.CommandText = "INSERT INTO comment_table (comment) VALUES (?)"
' adLongVarWChar对应nvarchar(max)类型,长度传-1即可
cmd.Parameters.Append cmd.CreateParameter("@comment", adLongVarWChar, adParamInput, -1, Range("A1").Value)
cmd.Execute
conn.Close
Set cmd = Nothing
Set conn = Nothing

读取展示配置

如果确认换行符已存入数据库,但读取到Excel后仍显示为单行,是因为Excel单元格默认关闭自动换行,只需添加一行配置即可:

' 读取数据库内容赋值到单元格
Range("A1").Value = rs!comment
' 开启自动换行显示多行格式
Range("A1").WrapText = True

验证存储结果

可在SSMS中执行以下语句验证换行符是否成功存入数据库:

-- 查询返回值>0则说明字段中存在换行符,存储成功
SELECT CHARINDEX(CHAR(10), comment) AS 换行符位置 
FROM comment_table 
WHERE 你的筛选条件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:54:03