如何在perl脚本中执行insert命令?

时间:2013-01-03 18:28:45

标签: sql-server perl

#!/usr/bin/perl
use strict;
use DBI;

use Data::Dumper;
use Asterisk::AGI;
my $agi = new Asterisk::AGI;


my $extension  = '8315';  
my $cti  = '7702009896';  
my $service_id =1;


my $DSN = q/dbi:ODBC:SQLSERVER/;
my $uid = q/ivr/;
my $pwd = q/ivr/;

my $DRIVER = "Freetds";
my $dbh = DBI->connect($DSN,$uid,$pwd) or die "Coudn't Connect SQL";


my $sql3=(qq{
                declare '@' + callnumber as int
                set '@' + callnumber = $callnumber
                set '@' + callnumber = (Select '@'+'@' + identity)

                exec "insert into rpt_call_detail (call_start_time,call_number,call_service_id,call_step_name,call_step_type,call_step_discription) values(getdate(),'@' + callnumber,$service_id,'START',0,'CLI:' + $cli)"

          });


my $call_insert1 = $dbh->prepare($sql3);
$call_insert1->execute();

如何在Perl脚本中设置sql server变量?我想将callnumber设置为@@ identity我无法成功执行上面的代码。请帮助我。

1 个答案:

答案 0 :(得分:0)

declare '@' + callnumber as int无效(MS)SQL。您希望它改为declare @callnumber as int,因此在转发@后,您最终会得到declare \@callnumber as int。我不熟悉使用@@IDENTITY,但假设该部分是正确的,你的$ sql3变量看起来像:

my $sql3=(qq{
                declare \@callnumber as int
                set \@callnumber = $callnumber
                set \@callnumber = (Select \@\@identity)

                exec "insert into rpt_call_detail (call_start_time,call_number,call_service_id,call_step_name,call_step_type,call_step_discription) values(getdate(),'@' + callnumber,$service_id,'START',0,'CLI:' + $cli)"

          });