【发布时间】:2010-08-11 17:03:17
【问题描述】:
使用 sql server 2008 在以下 perl 脚本中出现无效精度值错误:
use DBI;
$idx = '12345';
$query = 'if exists (select * from tbl where idx = ?) select top 10 * from tbl';
my $h = $dbh->prepare($query) or die "Couldn't prepare query: " . $dbh->errstr;
$h->execute($idx) or die "Couldn't execute statement: " . $h->errstr;
但是请注意,如果我尝试这样做
use DBI;
$query = 'if exists (select * from tbl where idx = \'12345\') select top 10 * from tbl';
my $h = $dbh->prepare($query) or die "Couldn't prepare query: " . $dbh->errstr;
$h->execute() or die "Couldn't execute statement: " . $h->errstr;
然后就可以了。我真的很困惑怎么办?在查询中可能会导致无效的精度错误。
感谢任何人提供的任何帮助。
【问题讨论】:
-
tbl中idx的数据类型是什么?
-
idx 是一个 varchar。错误的确切文本是 [Microsoft][ODBC SQL Server Driver][Invalid precision value (SQL-HY104) at filename.pl ...
-
完全猜测,但如果你尝试
if exists (select * from tbl where idx = '?') select top 10 * from tbl -
我试过了,它最终通过了?字符直接写入sql而不替换它。
-
另一个完整的猜测......你能明确地强制数据类型:
if exists (select * from tbl where idx = cast(? as varchar(30))) select top 10 * from tbl调整varchar(30)以匹配 idx 的定义。
标签: sql-server perl sql-server-2008 dbi