Что касается того, что вам нужно вернуть, то в любом случае, вероятно, сработает. Как сказал CodeToGlory, это зависит. Я бы склонялся к тому, чтобы вернуть оба значения сам.
Я бы изменил способ получения столбца идентификаторов в хранимой процедуре. Есть несколько способов получить его.
Вместо: SELECT @NewID = MAX (ID) из таблицы экспериментов
Я бы сделал:
Установить @NewID = @@ Identity
или
Set @NewID = SCOPE_IDENTITY ()
Вот выдержка из книг в соответствии с примером. Я могу помочь вам решить, какой использовать:
Например, есть две таблицы, T1 и T2, и триггер INSERT определен для T1. Когда строка вставляется в T1, триггер срабатывает и вставляет строку в T2. Этот сценарий иллюстрирует две области: вставка в T1 и вставка в T2 с помощью триггера.
Если предположить, что и T1, и T2 имеют идентичные столбцы, @@ IDENTITY и SCOPE_IDENTITY будут возвращать разные значения в конце инструкции INSERT для T1. @@ IDENTITY вернет значение последнего столбца идентификатора, вставленное в любую область текущего сеанса. Это значение, вставленное в T2. SCOPE_IDENTITY () вернет значение IDENTITY, вставленное в T1. Это была последняя вставка, которая произошла в той же области. Функция SCOPE_IDENTITY () будет возвращать нулевое значение, если функция вызывается до того, как какие-либо операторы INSERT в столбце идентификаторов появятся в области действия.