使用Perl脚本将BLOB插入MS SQL DB

时间:2010-08-26 11:56:11

标签: sql perl blob

请原谅我对Perl的无知,因为我是一名.NET开发人员(我可以听到你们所有人都在吐痰和诅咒;¬))

我们有一个要求是使用Perl脚本将一个BLOB(+一些其他数据)插入MS-SQL数据库(我们的后端系统使用Perl脚本在AIX上运行以进行日常业务)。

我们的Perl家伙,似乎遇到了一个问题:他可以插入到MS-SQL服务器中的最大BLOB(我们讨厌的.NETers使用)是64k但我们需要Perl脚本插入2MB的BLOB - 6MB

如果可以插入超过64k的BLOB;任何人都可以在调查途径上建议我们的Perl家伙可以为了达到这个目的而坚持下去吗?

很抱歉提出问题'通过代理',但我们的Perl大师正在度假。

提前致谢,

JD

2 个答案:

答案 0 :(得分:2)

如果是DBI,您可以将数据库句柄的最大缓冲区设置为所需的限制:

$dbh->{LongReadLen} = 10485760;  # 10 MB

来自DBI常见问题:

  

如何使用DBI处理BLOB数据?

     

使用DBI处理BLOB数据   非常直截了当。 BLOB专栏   在SELECT语句中指定为   按正常列。不过,你也是   需要指定最大BLOB大小   数据库句柄可以   使用LongReadLen属性获取。

     

例如:

### $dbh is a connected database handle
$sth = $dbh->prepare( "SELECT blob_column FROM blobby_table" );
$sth->execute; would fail.

### $dbh is a connected database handle
### Set the maximum BLOB size...
$dbh->{LongReadLen} = 16384;        ### 16Kb...Not much of a BLOB!
$sth = $dbh->prepare( "..." );
     

会成功没有列   值大于指定值   值

     

如果BLOB数据长于   LongReadLen的值,然后是一个错误   会发生。但是,DBI提供   另外一项功能   这将自动截断   获取BLOB的大小   LongReadLen如果更长。这样做   不会导致错误发生,但可能   使你获取的BLOB数据毫无用处。

     

此行为受到   LongTruncOk属性是   默认设置为false值(因此   使超长BLOB提取失败)。

### Set BLOB handling such that it's 16Kb and can be truncated
$dbh->{LongReadLen} = 16384;
$dbh->{LongTruncOk} = 1;
     

BLOB数据的截断可能不是a   在BLOB的情况下大不了   包含行程编码数据,但是   最后包含校验和的数据,   例如,一个ZIP文件,将是   没用了。

答案 1 :(得分:0)

要插入BLOB,通常需要使用占位符。使用占位符准备语句,然后按如下方式绑定要插入的值:

$ statement-> bind_param(??,$ myvalue,DBI :: SQL_BLOB);

哪里??是占位符的位置,从1开始。然后像往常一样执行语句,例如:

$陈述书>执行();

与往常一样,错误处理是一个很好的计划。我们经常使用SQLite,但我很确定这对于MSSQL和MySQL也是正确的。