SqlServer开发问题记录
1、从 nvarchar 数据类型到 datetime 数据类型的转换产生一个超出范围的值。
对于 CONVERT(datetime,rinfo.ProcYearMonth, 20) 如果ProcYearMonth存在null值或其他乱码会报这个错, SQL Server 2012 或更高版本,可以使用 TRY_CONVERT 或 TRY_CAST 函数,这样在转换失败时不会抛出异常,而是返回 NULL
TRY_CONVERT(datetime,rinfo.ProcYearMonth, 20)
PS:此问题只有在kettle执行时报错,dbever客户端能正常处理,可能时kettle对于异常会直接抛出
2、sql server表字段类型date,用kettle写入时用了转换conver(varchar(10),BizDate,23)时会报错,类型识别错误,此时直接用datetime或者convert(datetime,AlarmTime)格式导入就行,sqlserver会自动进行转换成date
3、修改表字段属性,由varchar改为datetime(ALTER TABLE EAO_FaultTask ALTER COLUMN EndTime datetime null;) 报错:从字符串转换日期和/或时间时,转换失败。
1)找出非标数据并将其更新为null
SELECT EndTime FROM EAO_FaultTask
WHERE TRY_CAST(EndTime AS datetime) IS NULL AND EndTime IS NOT NULL;
UPDATE EAO_FaultTask SET EndTime = null
WHERE TRY_CAST(EndTime AS datetime) IS NULL AND EndTime IS NOT NULL;
2)处理完所有异常数据后再执行修改语句

浙公网安备 33010602011771号