带有 sql 连接字符串的 perl 脚本看似故障转移点(。)
Posted
技术标签:
【中文标题】带有 sql 连接字符串的 perl 脚本看似故障转移点(。)【英文标题】:perl script with sql connection string seemingly failing over point(.) 【发布时间】:2016-03-21 01:50:43 【问题描述】:我在将 sql 函数的返回值插入变量时遇到了一些问题。当我运行下面的代码(连接字符串肯定有效)时,我收到以下错误:
在 Script.pl 第 34 行的操作员预期的位置找到了裸字, 靠近“'SELECT IDENT_CURRENT('数据库” (在数据库之前缺少运算符?) Script.pl 第 34 行的语法错误,靠近“'SELECT IDENT_CURRENT ('Database" Script.pl 第 34 行的 Table' 后面的错误名称。
我之前使用此语法成功准备/执行了 sql 语句。我尝试使用 $dbh->prepare ("SELECT IDENT_CURRENT ('Database.dbo.Table')") 注意“”。 然后脚本执行,但我的变量 $RID 只包含不正确的 -1。 我在 sql 服务器上运行纯 sql 代码作为查询,效果很好。 任何帮助将不胜感激。
#!/usr/bin/perl
## PERL MODULES
use DBI;
use DBD::ODBC;
use Text::CSV;
use POSIX;
use List::MoreUtils qw( each_array );
no strict "vars";
my $dbh = DBI->connect($data_source, $user, $password, RaiseError => 0, PrintError => 1) or die "Can't connect to $data_source: $DBI::errstr";
my $id_return = $dbh->prepare ('SELECT IDENT_CURRENT ('Database.dbo.Table')');
my $RID = $id_return->execute;
print $RID;
【问题讨论】:
【参考方案1】:不要关闭strict
。那从不*修复任何东西,它只是隐藏错误。打开warnings
。这也是个好主意。
您的问题是 - 您正在嵌套单引号:
''SELECT IDENT_CURRENT ('Database.dbo.Table')''
那是行不通的。使用\'
转义它们或仅使用:
qSELECT IDENT_CURRENT ('Database.dbo.Table')
* 好的,好的。 几乎从来没有。就 Stack Overflow 上的问题而言,它是“总是”的一个足够好的近似值。
【讨论】:
这确实解决了语法错误。经过更多测试后,我发现下面的代码有效。 $query = "SELECT IDENT_CURRENT ('dbo.Table')"; $sth = $dbh->prepare($query); $sth->执行(); $RID = $sth->fetchrow();打印 $RID;以上是关于带有 sql 连接字符串的 perl 脚本看似故障转移点(。)的主要内容,如果未能解决你的问题,请参考以下文章
在cmd 中执行perl脚本报错 Unrecognized character