Mark Ashworth wrote:
Hi,

The problem is when you want to insert rows into other tables for each of
the rows that have been inserted into to the user's table and those tables
have identity fields. In this case it seems that without a variable to hold
the userid, the IDENTITY_VAL_LOCAL() returns the new identity value from
those other tables (which is to be expected).

Regards,
Mark P Ashworth

-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Sent: 01 August 2006 03:27 PM
To: Derby Discussion
Subject: Re: Retrieving the identity column value after an insert

Mark Ashworth wrote:
Good Day,

I would like to run the following SQL in ij

INSERT INTO users (name) VALUES ('test');

And after the insert statement use the inserted id value to complete other inserts in other tables.

INSERT INTO attr (user_id, value) VALUES( INDENTITY_VAL_LOCAL(), 'test attr');

INSERT INTO attr (user_id, value) VALUES( INDENTITY_VAL_LOCAL(), 'test attr2'); <!-Problem here because the IDENTITY_VAL_LOCAL() now contains the id that was generated in the previous statement.

How do I assign the identity value to a variable?

Hello Mark,

I don't know how to assign the identity value to a variable, but if you can use multiple row INSERT statements, you should be able to do what you want.

INSERT INTO users (name) VALUES ('test');
INSERT INTO attr (user_id,value) VALUES
        (IDENTITY_VAL_LOCAL(), 'test attr'),
        (IDENTITY_VAL_LOCAL(), 'test attr2');

The multiple row insert will not update the value of IDENTITY_VAL_LOCAL.
Note that not all databases support this form of the INSERT statement.




Regards,
try SELECT IDENTITY_VAL_LOCAL() FROM users, I think that the IDENTITY_VAL_LOCAL() is per table, I have some stored procedures that do this and it seems to work. I'm not for certain that it is correct.

Paul


Reply via email to