Igual, simplemente lo almacenas en una variable temporal:
DECLARE @jeje INT
INSERT... (normal)
SET @jeje = SCOPE_IDENTITY()
INSERT INTO tabla (campo1,...) values ( @jeje,...)
INSERT INTO otratabla (campo1,...) values ( @jeje,...)
...
Sobre el porque es "inseguro", te cito lo que viene en la ayuda, en resumidas cuentas, el @@identity puede verse alterado por triggers o funciones corriendo por debajo:
Cita:
Iniciado por BOL SCOPE_IDENTITY and @@IDENTITY will return last identity values generated in any table in the current session. However, SCOPE_IDENTITY returns values inserted only within the current scope; @@IDENTITY is not limited to a specific scope.
For example, you have two tables, T1 and T2, and an INSERT trigger defined on T1. When a row is inserted to T1, the trigger fires and inserts a row in T2. This scenario illustrates two scopes: the insert on T1, and the insert on T2 as a result of the trigger.
Assuming that both T1 and T2 have IDENTITY columns, @@IDENTITY and SCOPE_IDENTITY will return different values at the end of an INSERT statement on T1.
@@IDENTITY will return the last IDENTITY column value inserted across any scope in the current session, which is the value inserted in T2.
SCOPE_IDENTITY() will return the IDENTITY value inserted in T1, which was the last INSERT that occurred in the same scope. The SCOPE_IDENTITY() function will return the NULL value if the function is invoked before any insert statements into an identity column occur in the scope.