IF NOT EXISTS (SELECT * FROM ENTITIES WHERE ID = $MaxEntityId) INSERT INTO ENTITIES (ID,TYPE,NAME) VALUES ($MaxEntityID, '$type', '$name') #### IF NOT EXISTS (SELECT * FROM ENTITIES WHERE TYPE = $type AND NAME = $name) INSERT INTO ENTITIES (TYPE, NAME) VALUES ('$type', '$name') #### ################ NOTE: UNTESTED CODE use strict; use warnings; use Win32::ODBC; my $dB = new Win32::ODBC("DSN=name;UID=user;PWD=password;"); die 'Cannot connect to dB.' if !$dB; my %tests = ( COUNTRY => 'UNITED_STATES', PERSON => 'FRED', PERSON => 'JOE' ); my ($type, $name); while (($type, $name) = each %tests) { my $query = qq( IF NOT EXISTS ( SELECT * FROM ENTITIES WHERE TYPE = '$type' AND NAME = '$name' ) INSERT INTO ENTITIES (TYPE, NAME) VALUES ('$type', '$name') ); my $rc = $dB->Sql($query); die "Query failed: $query ".Win32::ODBC::Error() if $rc; }