2015-12-15 38 views
0

我有一些麻煩,插入從一個SQL函數返回到變量。當我運行下面的代碼(連接字符串是明確工作),我收到以下錯誤:perl腳本與SQL連接字符串看似失敗點(。)

裸詞發現,其中運營商預計將在Script.pl線34, 近「‘SELECT IDENT_CURRENT(’數據庫」 (在Script.pl線34缺少運營商數據庫之前?)語法錯誤,在近線Script.pl「‘SELECT IDENT_CURRENT(’數據庫」 壞名聲表」後34

我成功製備/執行的SQL語句
我試過使用$ dbh-> prepare(「SELECT IDENT_CURRENT('Database.dbo.Table')」)注意t他「」。
然後腳本執行,但是我的變量$ RID只包含-1,這是不正確的。
我在sql server上運行純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; 

回答

2

不要關閉strict。從來沒有*修復任何東西,它只是隱藏錯誤。打開warnings。這也是一個好主意。

你這裏的問題是 - 你嵌套單引號:

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

這是行不通的。與\'逃離他們或者只是使用:

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

* OK,OK。幾乎沒有從來沒有。爲了解決堆棧溢出的問題,它對於「總是」是一個足夠好的近似值。

+0

這確實可以解決語法錯誤。經過多次測試後,我發現下面的代碼正在工作。 $ query =「SELECT IDENT_CURRENT('dbo.Table')」; $ sth = $ dbh-> prepare($ query); $ sth-> execute(); $ RID = $ sth-> fetchrow(); print $ RID; – HDemaiter