I\'m inserting multiple records into a table A from another table B. Is there a way to get the identity value of table A record and update table b record with out doing a cu
Use the ouput clause from 2005:
DECLARE @output TABLE (id int)
Insert into A (fname, lname)
OUTPUT inserted.ID INTO @output
SELECT fname, lname FROM B
select * from @output
now your table variable has the identity values of all the rows you insert.
Reading your question carefully, you just want to update table B based on the new identity values in table A.
After the insert is finished, just run an update...
UPDATE B
SET NewID = A.ID
FROM B INNER JOIN A
ON (B.FName = A.Fname AND B.LName = A.LName)
This assumes that the FName / LName combination can be used to key match the records between the tables. If this is not the case, you may need to add extra fields to ensure the records match correctly.
If you don't have an alternate key that allows you to match the records then it doesn't make sense at all, since the records in table B can't be distinguished from one another.
If you always want this behavior, you could put an AFTER INSERT trigger on TableA that will update table B.
MBelly is right on the money - But then the trigger will always try and update table B even if that's not required (Because you're also inserting from table C?).
Darren is also correct here, you can't get multiple identities back as a result set. Your options are using a cursor and taking the identity for each row you insert, or using Darren's approach of storing the identity before and after. So long as you know the increment of the identity this should work, so long as you make sure the table is locked for all three events.
If it was me, and it wasn't time critical I'd go with a cursor.
I suggest using uniqueidentifier type instead of identity. I this case you can generate IDs before insertion:
update B set NewID = NEWID()
insert into A(fname,lname,id) select fname,lname,NewID from B
You can get the by joining on the row number. This is possible because since it's an identity, it will just increment as you add items, which will be in the order that you are selecting them.