По звукам того, что вы пытаетесь сделать, вы можете использовать временную таблицу, вставляя в нее свои данные и ссылаясь на эту таблицу ниже в стеке вызовов вашего сеанса. Так что вызовите proc1 (вставить строки в #MyTable) -> proc2 (прочитать строки из #MyTable) -> proc3 и т. Д.
Скорее всего, ваш коллега пришел из магазина Oracle, где курсоры оптимизированы и фактически используются постоянно, хотя в большинстве случаев все еще не являются идеальным решением. В SQL Server курсоры обычно считаются дьяволом из-за того, что они не оптимизируются, как для Oracle. В SQL Server 2008 и более поздних версиях вы также можете использовать табличные параметры для передачи наборов данных в и из процедур. В действительности вы всегда можете сделать это, используя временные таблицы сессий. Я нахожусь на SQL Server 2012, и мне еще не нужно использовать табличные параметры, потому что временные таблицы работают так хорошо, но я уверен, что есть случаи, когда более поздние могут работать так же или лучше.
Хотя в любой реляционной базе данных всегда важно использовать логику, основанную на множествах, когда это возможно, и избегать любых конструкций или схем, которые потребуют от вас цикл за строкой. Конечно, есть крайние случаи, когда, возможно, это единственный путь, но убедитесь, что это единственный путь.