我已经将Sybase数据库迁移到SQL server 2008。使用数据库尝试使用dateTime2列设置某些数据(如1986-12-24 16:56:57:81000 )的主要应用程序是这样做的:
从字符串转换日期和/或时间时,转换失败。
使用点(.)运行相同的查询代替冒号(:)作为毫秒分隔符(如1986-12-24 16:56:57.81000 )或将毫秒限制为3位(如1986-12-24 16:56:57:810 )将解决问题。
注:
我无法访问应用程序的源代码来解决这个问题,而且有很多表都有相同的问题。
是否有任何快速转发解决方案,或者应该在所有表上编写大量触发器来使用上述解决方案来修复它?
提前感谢
发布于 2018-05-05 23:01:04
正如戈登·林诺夫所说
当前表上的触发器不会有帮助,因为类型转换发生在调用触发器之前。想想触发器是如何工作的:数据在"protorow“中可用。
但是有一个简单的答案!
使用SQL Server Native Client Connection而不是基本的SQL Server ODBC connection来处理所有事情。
注意:
Use Regional Settings产生了一些其他的转换问题,所以如果您不需要它,就不会使用它。发布于 2018-05-05 10:50:27
你为什么需要触发器?可以使用update将最后一个':'更改为'.'
update t
set col = stuff(col, 20, 1, '.');您还错误地将该列描述为datetime2。它使用内部日期/时间格式。您的列显然是字符串。
编辑:
我想我误解了这个问题(假设数据已经在表中)。将数据放到暂存表中,并在另一步中进行转换。
当前表上的触发器不会有帮助,因为类型转换发生在调用触发器之前。想想触发器是如何工作的:数据在"protorow“中可用。
您可以通过创建视图和在视图上构建触发器来获得触发器,但这甚至更糟。也许最简单的解决办法是:
datetime2。发布于 2018-05-05 12:02:32
选择替换(getdate(),':','.')
但是它会将String提供给datetime,而它不会被隐藏到DateTime Formate中。
https://stackoverflow.com/questions/50187277
复制相似问题