Getting @@IDENTITY back from MSSQL

Scott Cain scain at athersys.com
Fri Nov 9 11:48:03 EST 2001


Hello,

I am writing Perl (5.6.1) on a linux box (RH 7.1) with FreeTDS (0.51) and
DBI (1.19) to talk to a MSSQL server on a win2000 box.  I want to get
@@IDENTITY from the last insert I made (@@IDENTITY contains that value of
the last autoincrement on a primary key).

Here is test code I created:

#!/usr/local/bin/perl -w
   use DBI;
   use strict;

   $ENV{'SYBASE'} = '/usr/local/freetds';
   $ENV{'TDSVER'} = 70;

   my $server = "server";
   my $db = "db";
   my $user = "sqluser";
   my $passwd = "sqluserpasswd";

   my $dbh =
DBI->connect("dbi:Sybase:server=$server;database=$db",$user,$passwd)
     or die "--$!--\n";

   my $sth = $dbh->prepare(' insert into sctemp (scratch) values (42)
select @@IDENTITY as foo');
   $sth->execute;

   my $data =  $sth->fetchrow_hashref;
   my $seqid=  $$data{foo};
   my $err  =  $sth->errstr;
   print "$seqid, $err\n";

The problem I have is that $seqid seems to be getting truncated, ie, the
value of @@IDENTITY is about 20, but the value of $seqid that gets printed
out is 2.  The query works fine as written in the Query Analyzer on
Windows.  At this point, it feels like a problem with FreeTDS.  In
addition to fetchrow_hashref, I tried fetch and fetchrow_array.  Any
ideas?

Thanks,
Scott



More information about the FreeTDS mailing list