Node MSSQL向SQL Server插入日期值异常问题求助
看来你在DB2到SQL Server 2016的数据迁移中踩了日期类型的坑,我之前处理过类似的问题,给你几个具体的排查和解决方向:
先确认目标表的字段类型是否真的是
date
有时候我们以为代码里定义了date类型,但实际SQL Server表的结构可能不是。你可以执行这条SQL语句检查目标表tempInsert的字段类型:SELECT COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'tempInsert' AND COLUMN_NAME = '你的日期字段名'如果结果不是
date,而是datetime或smalldatetime,那就是这里出问题了——需要把字段改成date类型,才能消除弃用警告,同时避免日期转换异常。排查DB2源数据的日期有效性
SQL Server不支持0000-00-00这类无效日期,会自动转成0001-01-01。你可以先在DB2里检查源数据:SELECT 你的日期字段名, CHAR(你的日期字段名, ISO) FROM DB2源表名看看有没有空值、
0000-00-00或者格式异常的日期值。如果有这类数据,需要先在DB2里清洗(比如替换成NULL或者合法日期),再导入SQL Server。确保代码里的字段类型映射正确
从你给出的代码片段看,要确认添加日期字段时是不是明确指定了sqlDB.Date类型,而不是sqlDB.DateTime。正确的写法应该是这样:table = new sqlDB.Table('tempInsert'); table.create = false; // 示例:添加District字段和日期字段 table.columns.add('District', sqlDB.VarChar, 50); table.columns.add('RecordDate', sqlDB.Date); // 这里必须用Date类型,不能用DateTime如果不小心用了
DateTime类型,不仅会触发弃用警告,还可能导致日期解析错误,最终插入0001-01-01。检查连接字符串的配置
有时候旧的SQL Server驱动或连接字符串设置会影响日期类型的处理。确保你的连接字符串没有启用过时的参数,比如UseFMTONLY,同时尽量使用最新的SQL Server驱动版本,这样能更好地支持date类型的映射。
按照这几个步骤排查下来,应该能解决日期显示异常和弃用警告的问题。
内容的提问来源于stack exchange,提问作者user3183411

