Perl DBI / MS ODBC 驱动程序 (LinuxL:RHEL) / SQL-服务器:如何 insert/update BLOB varbinary(max) 数据?
Perl DBI / MS ODBC Driver (LinuxL:RHEL) / SQL-Server: How to insert/update BLOB varbinary(max) data?
SQL-服务器的新手。我正在尝试通过 PERL/MS ODBC driver/DBD::ODBC 使用以下(简化)将 pdf 加载到 SQL-Server table(数据类型 varbinary(max)) ) 代码:
use DBI qw(:sql_types);
open my $pdfFH, "test.pdf";
my @pdf = <$pdfFH>; close $pdfFH;
my $pdfStr = join('', @pdf);
my $dbh = <...valid db-handle ...>;
my $sth = $dbh->prepare(qq(
insert into
TestTable(Report)
values
(?)));
$sth->bind_param(1,$pdfStr,DBI::SQL_VARBINARY);
$sth->execute;
错误:
DBD::ODBC::st bind_param failed: [Microsoft][ODBC Driver 17 for SQL Server]Invalid precision value (SQL-HY104) at ./t_sqlserver.pl line 37.
DBD::ODBC::st execute failed: [Microsoft][ODBC Driver 17 for SQL Server]COUNT field incorrect or syntax error (SQL-07002) at ./t_sqlserver.pl line 38.
我能够成功加载其他数据类型。另一种方法是使用 OPENROWSET(BULK...) 从文件系统本地加载 pdf,但我更愿意直接加载以避免将文件从 Linux 移动到 Windows。
driver 应该足够聪明,大多数时候都能猜出正确的类型。尝试绑定参数而不指定类型。
SQL-服务器的新手。我正在尝试通过 PERL/MS ODBC driver/DBD::ODBC 使用以下(简化)将 pdf 加载到 SQL-Server table(数据类型 varbinary(max)) ) 代码:
use DBI qw(:sql_types);
open my $pdfFH, "test.pdf";
my @pdf = <$pdfFH>; close $pdfFH;
my $pdfStr = join('', @pdf);
my $dbh = <...valid db-handle ...>;
my $sth = $dbh->prepare(qq(
insert into
TestTable(Report)
values
(?)));
$sth->bind_param(1,$pdfStr,DBI::SQL_VARBINARY);
$sth->execute;
错误:
DBD::ODBC::st bind_param failed: [Microsoft][ODBC Driver 17 for SQL Server]Invalid precision value (SQL-HY104) at ./t_sqlserver.pl line 37.
DBD::ODBC::st execute failed: [Microsoft][ODBC Driver 17 for SQL Server]COUNT field incorrect or syntax error (SQL-07002) at ./t_sqlserver.pl line 38.
我能够成功加载其他数据类型。另一种方法是使用 OPENROWSET(BULK...) 从文件系统本地加载 pdf,但我更愿意直接加载以避免将文件从 Linux 移动到 Windows。
driver 应该足够聪明,大多数时候都能猜出正确的类型。尝试绑定参数而不指定类型。