Don't use <selectKey>. Embed SELECT SCOPE_IDENTITY() AS value at the bottom of your insert statement and use the returnClass.

<insert id="InsertSomething" parameterClass="Foo" resultClass="int">
    INSERT INTO Foos ( Name ) VALUES ( #Name# )
    SELECT SCOPE_IDENTITY() AS value
</insert>

I was involved in a long discussion about this before, but it has to do with the way iBATIS issues the <selectKey> query. It's sent in a separate batch, and MSSQL's SCOPE_IDENTITY() only works at the batch level.

It's not really a bug, just an obscure difference between the way similar functions for other databases work.

V/R,
Nicholas Piasecki

On May 20, 2008, at 3:07 AM, Alon Hirsch wrote:

Hi,

It seems that there is an issue using SELECT SCOPE_IDENTITY() in order
to get the ID of an inserted record using SQL Server 2005.
When using SCOPE_IDENTITY - the returned value is 0 instead of the
actual value returned from the SQL, but when using @@IDENTITY, the key
is returned.

Is this a bug or by design ?
Is there any change that the system can be made to work with
SCOPE_IDENTITY as well ?

Thanx,
Alon

Reply via email to