【发布时间】:2010-12-01 04:35:00
【问题描述】:
我们从 Perl 将值插入到类型为 NUMERIC(19,5) 的 SQL Server 2005 数据库列中。只要绝对值是 0.0001 或更大,它就可以工作。但是,当值到达小数点后 5 位时,Perl 开始以指数格式存储它们(-9e-05 而不是-0.00009),然后我们从 SQL Server 收到错误“Error converting data type varchar to numeric”。我们如何防止这种情况并使其正确插入小数值?
我们正在使用 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.
【问题讨论】:
标签: sql-server sql-server-2005 perl dbi