VARCHAR(MAX)导致记录集后续字段读取返回NULL的技术咨询
ASP Classic读取SQL Server VARCHAR(MAX)字段后后续字段返回空值的问题
问题详情
表结构
SQL Server原表结构:
A INT B VARCHAR(MAX) C INT
ASP Classic执行代码
set RS = oConn.Execute("SELECT A,B,C FROM Table") RS("A") returns A RS("B") returns B RS("C") returns ""
异常现象
- 若先读取
C字段,可正常获取其值; - 一旦读取
B字段(VARCHAR(MAX)类型),后续所有记录集字段调用均返回空值。
临时解决方案
- 调整表字段顺序,将VARCHAR(MAX)类型字段放在最后:
A INT C INT B VARCHAR(MAX) - 仅执行
SELECT B FROM Table语句单独读取该大值字段。
官方文档相关说明
此问题确实源于旧版ADODB驱动对SQL Server 2005引入的**大值数据类型(VARCHAR(MAX)、NVARCHAR(MAX)、VARBINARY(MAX))**支持不完善:
- 旧版驱动(如SQL Server ODBC Driver 6.5及更早、SQLOLEDB OLE DB Provider)无法正确识别大值字段的结束位置,读取此类字段后会导致记录集指针偏移错误,进而使后续字段读取返回空值。
- 微软官方明确建议使用支持大值类型的驱动版本,例如SQL Server Native Client 10.0及以上(对应OLE DB Provider为SQLNCLI10/11等),或更新的ODBC驱动,这类驱动对大值数据类型有完整适配,可彻底解决该问题。
内容的提问来源于stack exchange,提问作者user3597269
相关产品推荐
相关产品推荐

