Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server Perl,尝试在SQL Server中运行存储过程时出错_Sql Server_Perl_Stored Procedures_Sybase - Fatal编程技术网

Sql server Perl,尝试在SQL Server中运行存储过程时出错

Sql server Perl,尝试在SQL Server中运行存储过程时出错,sql-server,perl,stored-procedures,sybase,Sql Server,Perl,Stored Procedures,Sybase,我正在尝试执行一个存储过程,该存储过程的表上有3列类型为nvarchar(max)。但是,我得到了以下错误: H2::Controller::AP->apge“DBD::Sybase::st fetchrow_hashref失败:服务器消息编号=4004严重性=16状态=1行=48服务器=开发过程=sp_列表文本=仅Unicode排序规则中的Unicode数据或ntext数据无法使用DB库(如ISQL)或ODBC版本3.7或更早版本发送到客户端。at/AP.pm行361。” 我尝试将列转换为va

我正在尝试执行一个存储过程,该存储过程的表上有3列类型为
nvarchar(max)
。但是,我得到了以下错误:

H2::Controller::AP->apge“DBD::Sybase::st fetchrow_hashref失败:服务器消息编号=4004严重性=16状态=1行=48服务器=开发过程=sp_列表文本=仅Unicode排序规则中的Unicode数据或ntext数据无法使用DB库(如ISQL)或ODBC版本3.7或更早版本发送到客户端。at/AP.pm行361。”

我尝试将列转换为
varchar(max)
text
,但仍然失败

运行SQL可以很好地检索数据,但调用存储过程会出错

已创建一个临时表,该表具有三列的文本类型

出现错误时失败:

在H2::Controller::AP->apge“DBD::Sybase::st fetchrow_hashref失败:服务器消息编号=4004严重性=16状态=1行=47服务器=开发过程=sp_列表文本=仅Unicode排序规则中的Unicode数据或ntext数据无法使用DB库(如ISQL)或ODBC版本3.7或更早版本发送到客户端。at/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行列。

从错误消息中可以看出,您的Sybase Perl DBD驱动程序是使用“DBLib”编译的,而“DBLib”实际上已经多年没有维护过了。20世纪90年代,它被CTLib取代。DBLib不支持多字节字符集

您可能希望升级/重新编译DBD驱动程序,或者用Microsoft提供的ODBC驱动程序替换它。Microsoft在提供MS SQL for Linux的同时,还提供了这种Linux驱动程序

如果您使用的是FreeTDS,您可以通过更改本答案中提到的协议版本号来获得一些里程


从错误消息中可以看出,您的Sybase Perl DBD驱动程序是使用“DBLib”编译的,而“DBLib”实际上已经多年没有维护过了。20世纪90年代,它被CTLib取代。DBLib不支持多字节字符集

您可能希望升级/重新编译DBD驱动程序,或者用Microsoft提供的ODBC驱动程序替换它。Microsoft在提供MS SQL for Linux的同时,还提供了这种Linux驱动程序

如果您使用的是FreeTDS,您可以通过更改本答案中提到的协议版本号来获得一些里程