На самом деле INSERT..EXEC попытается вставить BOTH-данные в таблицу. Если столбец соответствует совпадению и тип данных может быть неявно преобразован, тогда вы фактически получите оба.
В противном случае он всегда будет терпеть неудачу, потому что нет возможности получить только один из результатов.
Решение этой проблемы состоит в том, чтобы извлечь функциональность, которую вы хотите от вызванной процедуры, и включить ее в процедуру вызова (ранее). И напомните себе, что «SQL не похож на клиентский код: избыточный код более приемлем, чем избыточные данные».
В случае, если это не было ясно, выше, позвольте мне разграничить факты и варианты, доступные для тех, кто в этой ситуации:
1) Если два набора результатов, возвращаемые совместимы, то вы можете получить как в одной таблице с INSERT и попытаться удалить те, которые вы не хотите.
2) Если два набора результатов несовместимы, то INSERT..EXEC нельзя заставить работать.
3) Вы можете скопировать код из вызываемой процедуры и повторно использовать его в вызывающем абоненте, а также оплатить стоимость ремонта с двойным редактированием.
4) Вы можете изменить вызванную процедуру для более совместимой работы с другими процедурами.
Thats it. Это ваш выбор в T-SQL для этой ситуации. Есть некоторые дополнительные трюки, которые вы можете играть с SQLCLR или клиентским кодом, но они будут включать в себя немного по-другому.
Возможный дубликат [Доступ к наборам результатов из хранимых процедур Transact-SQL SQL Server] (https://stackoverflow.com/questions/58940/access-to-result-sets-from-within-stored-procedures- transact-sql-sql-server) –