You can't guarantee contiguous or consecutive identity values in SQL Server
- An insert of multiple rows won't guarantee this. See Do Inserted Records Always Receive Contiguous Identity ValuesDo Inserted Records Always Receive Contiguous Identity Values.
- The current identity value stays incremented on rollback (either explicit ROLLBACK or implicit due to a CONSTRAINT error).
- Loading a temp table doesn't guarantee consecutive values. Saying that, this is harder to prove, and works in practice (as many folk rely on it), but be warned...
You have to adapt to gaps in your numbering, however generated.