问题是这样的:
    有这样一个生成环境,每隔一个采集周期就会将采回来的数据录入数据库,突然有一天报了异常,有一条数据不能入库,异常为“从数据类型 nvarchar 转换为 numeric 时出错”。查看异常信息得知,这条数据除了有个字段的值是用科学计数法表示的以外,其余字段的值与之前正常入库的字段没什么太大变化,且都是数字型。由于之前的数据都比较小,都不需要用科学计数法表示就入库了,所以我开始怀疑是科学计数法不能入库的原因。但经过测试排除了这种可能。
    后来查看带科学计数法和不带科学计数法的2条数据入库的执行计划,发现其编译值不同,说明这2种数据入库用的是不同的执行计划,后来继续实验得知,用科学计数法表示的值在不同的字段,其产生的执行计划也不同,于是我猜测SQL Server2005在将带科学计数法的数据入库时,应该是做了什么转换的操作,如果用不包含科学计数法的数据入库产生的执行计划去执行带科学计数法的数据入库,就少了这个转换过程,于是报了“从数据类型 nvarchar 转换为 numeric 时出错”。
    以上都是我的猜测,我怀疑SQL Server2005在某种情况下错误的选择了执行计划才出现上面的错误。由于不好复现,我也不能证实这是SQL Server2005的BUG,但是这情况已是第2次在生产环境中出现了。
    大家有没有遇到类似的情况啊?