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

如何在SQL Server 2019中用MATLAB更新含NaN值的float数据?

问题:MATLAB调用update更新SQL Server float字段时,NaN触发TDS协议错误

Error using database.jdbc.connection/update
无法完成更新操作。传入的表格数据流(TDS)远程过程调用(RPC)协议流不正确。参数6(""):提供的值不是有效的float数据类型实例。检查源数据中的无效值。无效值示例包括小数位数大于精度的数值类型数据。

注:目标float字段允许NULL值。

原因

SQL Server的float类型支持NULL,但MATLAB的NaN不属于SQL标准的NULL范畴,JDBC/ODBC驱动无法将NaN转换为SQL Server可识别的NULL值,导致协议流解析失败。

解决办法

将数据中的NaN替换为MATLAB中能被数据库驱动识别为SQL NULL的取值:

方法1:兼容所有MATLAB版本

用空矩阵[]替换NaN:

% 假设待更新数据存储在变量updateData中
updateData(isnan(updateData)) = [];

% 执行更新操作
update(conn, '目标表名', '目标float列名', updateData, '条件列名', 条件值);

方法2:MATLAB R2020b及以上版本推荐

使用sqlmissing()函数(专门用于表示SQL NULL):

updateData(isnan(updateData)) = sqlmissing;

% 执行更新
update(conn, '目标表名', '目标float列名', updateData, '条件列名', 条件值);

验证

替换后,MATLAB会将[]或sqlmissing()正确映射为SQL Server的NULL值,符合字段允许NULL的配置,即可正常完成更新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 10:45:34