On 30/09/10 16:44, Ludwig, Michael wrote:
>> Did you use the do method or prepare/execute. If the former, 
>> try separating it into a prepare/execute.
> 
> I'm using prepare/execute.

Shame.

> A simple test case I wrote does work.

In which case I've no idea - sorry.

> The problem must be with the specifics of my
> insert/trigger/procedure/xml/update scenario.

It sounds like it.
 
> Here's the simple test case:
> 
> ==== SQL ====
> 
> create table tt1 (a int);
> create table tt2 (b int);
> create trigger trig_tt1 on tt1
> for insert
> as begin
>   insert into tt2 select a from Inserted
> end
> -- Testing it works:
> insert into tt1 values (77);
> select * from tt2;
> 
> ==== Perl ====
> 
> use strict;
> use warnings;
> use DBI;
> 
> my $dsn = 'dbi:ODBC:testikowski';
> my %opt = (PrintError => 0, RaiseError => 1, AutoCommit => 1);
> my $dbh = DBI->connect( $dsn, 'usr', 'secret', \%opt );
> 
> my $count = 0;
> my $show = sub {
>   $count++;
>   my $rows = $dbh->selectcol_arrayref('select b from tt2');
>   print "($count) @$rows\n";
> };
> 
> $show->();
> 
> #$dbh->begin_work;
> my $sth_I = $dbh->prepare( 'insert into tt1 (a) values (?)' );
> my $ret = $sth_I->execute( time );
> #$dbh->commit;
> print "insert: $ret\n";
> 
> $show->();
> 
> $dbh->disconnect;
> 
> print STDERR $DBI::VERSION, "\n";
> print STDERR $DBD::ODBC::VERSION, "\n";
> 
> __END__
> Michael Ludwig

Can you put print statements in your real trigger and setup and 
odbc_err_handler to catch them so you can see what is really running?

There is an example in t/20SqlServer.t included in the DBD::ODBC test suite.

Martin
-- 
Martin J. Evans
Easysoft Limited
http://www.easysoft.com

Reply via email to