Direi che dovresti usare SCOPE_IDENTITY()
come @@identity
restituirà l'identità dell'ultima cosa inserita (che potrebbe non essere la tua procedura memorizzata se più query sono in esecuzione contemporaneamente).
Devi anche SELEZIONARLO, non RESTITUIRLO.
ExecuteScalar
restituirà il valore della prima colonna dalla prima riga di un set di risultati.
Allora...
SELECT SCOPE_IDENTITY();
è probabilmente più quello che vuoi.