#!/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我无法成功执行上面的代码。请帮助我。
答案 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)"
});