【发布时间】:2020-01-12 08:38:55
【问题描述】:
我正在尝试执行一个存储过程,该过程在表上具有 3 个 nvarchar(max) 类型的列。但是,我收到以下错误:
在 H2::Controller::AP->apge 中捕获异常“DBD::Sybase::st fetchrow_hashref 失败:服务器消息编号=4004 严重性=16 状态=1 行=48 服务器=DEV 过程=sp_List 文本=Unicode无法使用 DB-Library(例如 ISQL)或 ODBC 版本 3.7 或更早版本将仅 Unicode 排序规则中的数据或 ntext 数据发送到客户端。位于 /AP.pm 第 361 行。”
我尝试将列转换为varchar(max) 和text,但仍然失败。
运行 SQL 会很好地检索数据,但调用存储过程会出错。
已创建具有三列文本类型的临时表。
失败并出现错误:
在 H2::Controller::AP->apge 中捕获异常“DBD::Sybase::st fetchrow_hashref failed: Server message number=4004 severity=16 state=1 line=47 server=DEV procedure=sp_List text=Unicode无法使用 DB-Library(例如 ISQL)或 ODBC 版本 3.7 或更早版本将仅 Unicode 排序规则中的数据或 ntext 数据发送到客户端。位于 /AP.pm 第 361 行。”
数据库连接是:
has 'dbh' => ( is => 'rw', isa => 'DBI::db', default => sub{ return DATABASE::connect( system => 'xx', database => 'xxx', user => 'xxx' ); } );
对存储过程的调用:
my $sql ="exec tskMngmnt.dbo.sp_List ";
if (defined $a && $a ne "" && $a ne "NONE") {
$sql .= "\@e = $a ";
} else {
$sql .= "\@e = NULL ";
}
这是我们已安装的 DBI 版本:
perl -MDBI -e 'DBI-> installed_versions;'
Perl : 5.018002 (x86_64-linux-thread-multi)
OS : linux (4.4.92-31-default)
DBI : 1.628
DBD::mysql : 4.021
DBD::Sybase : 1.15
DBD::Sponge : 12.010003
DBD::SQLite : 1.50
DBD::Proxy : 0.2004
DBD::Gofer : 0.015327
DBD::File : 0.42
DBD::ExampleP : 12.014311
DBD::DBM : 0.08
存储过程应返回我尝试检索的 1 行列。
【问题讨论】:
标签: sql-server perl stored-procedures sybase