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

