如何通过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
相关产品推荐
相关产品推荐

