Try checking your second $sth for more_results. It may be affecting the outcome.
Regards, Jeff > -----Original Message----- > From: Mitchell, Louise M [mailto:[EMAIL PROTECTED] > Sent: Friday, August 26, 2005 4:31 PM > To: dbi-users@perl.org > Subject: RE: error string being lost in DBD::ODBC > > > > Hi All, > > I'm following up on this problem since it's now my problem. > > Does anyone have any ideas? I'm butting my head against a > wall on this one. > > Thanks, > Louise Mitchell > ************************************** > > The most recent code below: > > #!d:\apps\perl\bin\perl.exe > > use DBI; > use DBD::ODBC; > > select STDOUT; $|=1; > select STDERR; $|=1; > > > my $dbh = DBI->connect("dbi:ODBC:mysqlserver","myuser","mypassword"); > $dbh->{odbc_async_exec} = 1; > $dbh->{LongTruncOk} = 0; > $dbh->{LongReadLen} = 2000000; > $dbh->{PrintError} = 0; > > $sql = "drop procedure test_raiserror1"; > $dbh->do($sql) || warn $DBD::errstr; > > $sql = "drop procedure test_raiserror2"; > $dbh->do($sql) || warn $DBD::errstr; > > $sql = "create procedure test_raiserror1 > as begin > raiserror('my error',16,1) with nowait > end"; > $dbh->do($sql) || die $DBD::errstr; > > $sql = "create procedure test_raiserror2 > as begin > select (1) > raiserror('my error',16,1) with nowait > end"; > $dbh->do($sql) || die $DBD::errstr; > > print "created\n\n"; > > > #this bit correctly returns "my error" into dbi::errstr > $sql = "test_raiserror1"; > print "\n\ntest_raiserror1 - usually works\n"; > $rows = $dbh->do($sql); > print "rows: $rows\n"; > print "errstr: $DBI::errstr\n\n"; > > #this one does not > $sql = "test_raiserror2"; > print "\n\ntest_raiserror2 - usually doesnt work\n"; > $sth = $dbh->prepare($sql); > warn $DBI::errstr if $DBI::errstr; > > $rc = $sth->execute(); > warn $DBI::errstr if $DBI::errstr; > #$rows = $dbh->do($sql); > print "rows: $rows\n"; > print "errstr: $DBI::errstr\n\n"; > print "dropped\n\n"; > > *************************** > RESULTS BELOW > *************************** > created > > > > test_raiserror1 - usually works > rows: > errstr: [Microsoft][ODBC SQL Server Driver][SQL Server]my error > (SQL-42000)(DBD: Execute immediate failed err=-1) > > > > test_raiserror2 - usually doesnt work > rows: > errstr: > > dropped > > > > > -----Original Message----- > From: Mitchell, Adam R > Sent: Monday, August 01, 2005 3:50 PM > To: 'dbi-users@perl.org' > Subject: error string being lost in DBD::ODBC > > I'm having a problem where the error string from a raiserror > (inside a stored procedure) is disappearing. I've reduced it > to the fact that it only occurs if there is some part of the > stored procedure that returns rows (0 or more). > > Here is a code snippet that illustrates the problem: > > > > use DBI; > use DBD::ODBC; > > > my $dbh = DBI->connect("my_sqlserver_database","myuser","mypass"); > > > $sql = "create procedure test_raiserror1 > as begin > raiserror('my error',16,1) with nowait > end"; > $dbh->do($sql) || die $DBD::errstr; > > $sql = "create procedure test_raiserror2 > as begin > select (1) > raiserror('my error',16,1) with nowait > end"; > $dbh->do($sql) || die $DBD::errstr; > > print "created\n\n"; > > > #this bit correctly returns "my error" into dbi::errstr $sql > = "test_raiserror1"; print "test_raiserror1:\n"; $rows = > $dbh->do($sql); print "rows: $rows\n"; print "errstr: > $DBI::errstr\n\n"; > > #this one does not > $sql = "test_raiserror2"; > print "test_raiserror2:\n"; > $rows = $dbh->do($sql); > print "rows: $rows\n"; > print "errstr: $DBI::errstr\n\n"; > > > $sql = "drop procedure test_raiserror1"; > $dbh->do($sql) || die $DBD::errstr; > > $sql = "drop procedure test_raiserror2"; > $dbh->do($sql) || die $DBD::errstr; > > > print "dropped\n\n"; > > > > > > Note how the first one returns the error, while the second > one simply returns -1. > > I think it may have to do with the string returned from sql > server. Here is the difference in the return string when they > are executed in ms sql query analyzer: > > > test1: > Server: Msg 50000, Level 16, State 1, Procedure > test_raiserror1, Line 4 my error > > > test2: > (1 row(s) affected) > > Server: Msg 50000, Level 16, State 1, Procedure > test_raiserror1, Line 4 my error > > > > Does anyone know how I can get at the error string? > > Thanks, > Adam Mitchell >