Is there a way to retrieve all the keys of the newly inserted records when using an INSERT INTO ... SELECT FROM query?
Use the OUTPUT clause to capture them (SQL Server 2005 and up).
DECLARE @MyVar TABLE ( ID int )
INSERT INTO dbo.TargetTable
OUTPUT INSERTED.ID INTO @MyVar
SELECT * FROM dbo.SourceTable
SELECT * FROM @MyVar
Some databases support the INSERT INTO ... SELECT ... RETURNING ...
syntax. Since you are using TSQL, I believe the syntax for that is:
INSERT INTO table (fields...)
OUTPUT outputfields...
SELECT ...
There's a PDF on the issue: Returning.pdf