PlatformMsSQLServerImpl.getLastInsertIdentityQuery creates incorrect SQL 
statement to pull the identity from the last inserted row
----------------------------------------------------------------------------------------------------------------------------------

         Key: OJB-77
         URL: http://issues.apache.org/jira/browse/OJB-77
     Project: OJB
        Type: Bug
  Components: PB-API  
    Versions: 1.0.3    
 Environment: Microsoft SQL 2000 server
    Reporter: Charles N. Harvey


org.apache.ojb.broker.platforms.PlatformMsSQLServerImpl.getLastInsertIdentityQuery(java.lang.String
 tableName)

Returns a string that says:
   "SELECT @@IDENTITY FROM " + tableName;

This, is in fact, incorrect.

It should be:
   "SELECT @@IDENTITY";


Depending on table size, this query can run for MINUTES.  As it was doing for 
me.  Try it out.  Open up a query browser and
run this:

 INSERT INTO TABLE (...) VALUES (...) SELECT @@IDENTITY FROM TABLE

And then compare to this:

 INSERT INTO TABLE (...) VALUES (...) SELECT @@IDENTITY

Its silly, but the difference is huge.  The first one scans every row in the 
database, printing out 'null' for every row, then spits
out the last identity at the end.  In a table of 9 million rows, this ran for 
15 minutes.  Take the "FROM TABLE" off and it pulls the
identity value from a system table and returns in .0001 ms.


-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to