Если это для приложения, то почему бы просто не использовать Linq, вы можете выполнить такие вещи за несколько минут, в более сжатой форме и с большим упором на модель бизнес-логики.
Если нет, я настоятельно рекомендую транзакцию и версию SCOPE_IDENTITY, потому что, если вы находитесь в сильно загруженной системе, другая операция может выполнить вставку и изменить значение идентификатора, так что вы получите несогласованные данные.