我们从 Perl 将值插入到类型为 NUMERIC(19,5) 的 SQL Server 2005 数据库列中。只要绝对值是 0.0001 或更大,它就可以工作。但是,当值到达小数点后第 5 位时,Perl 开始以指数格式(-9e-05
而不是-0.00009
)存储它们,然后我们Error converting data type varchar to numeric
从 SQL Server 收到错误“”。我们如何防止这种情况并使其正确插入小数值?
我们使用 perl v5.8.5、DBI 1.56、DBD::Sybase 1.07 和 SQL Server 2005。
代码大致如下,但我删除了无关字段:
$invoice->{IL_UNITPRICE} = 0.09; # Actually comes from another database
$invoice->{IL_PRICEUNITCONV} = 0.001; # Actually comes from another database
$unitprice = $invoice->{IL_UNITPRICE} * -1 * $invoice->{IL_PRICEUNITCONV};
#$unitprice equals -9e-05 at this point.
$sth = $dbh->prepare('INSERT INTO foo ( bar ) VALUES ( ? )');
$sth->execute($unitprice);
上面的行失败并出现错误:DBD::Sybase::st execute failed: Server message number=8114 severity=16 state=5 line=2 server=baz text=Error converting data type varchar to numeric.