带有 sql 连接字符串的 perl 脚本似乎在 point(.)

perl script with sql connection string seemingly failing over point(.)

我在将 sql 函数中的 return 插入变量时遇到了一些问题。当我 运行 下面的代码(连接字符串确实有效)时,我收到以下错误:

Bareword found where operator expected at Script.pl line 34, near "'SELECT IDENT_CURRENT ('Database" (Missing operator before Database?) syntax error at Script.pl line 34, near "'SELECT IDENT_CURRENT ('Database" Bad name after Table' at Script.pl line 34.

我在使用此语法之前成功 prepared/executed 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;

不要关闭 strict。这永远不会*修复任何东西,它只是隐藏了错误。开启 warnings。这也是个好主意。

您的问题是 - 您嵌套了单引号:

''SELECT IDENT_CURRENT ('Database.dbo.Table')''

那是行不通的。用 \' 转义它们或者只使用:

q{SELECT IDENT_CURRENT ('Database.dbo.Table')}

* 好的,好的。 几乎从来没有。就 Stack Overflow 上的问题而言,它是 "always" 的一个足够好的近似值。