Основываясь на комментариях выше, я бы посоветовал вам рассмотреть табличную функцию.
Это может быть параметризовано, и вы можете сделать это:
INSERT @foo (col1, col14, col29)
SELECT col1, col14, col29 FROM dbo.ufnTVF (@p1, @p2)
В противном случае, это OPENROWSET как «самое чистое» (я использую это слабо) решение
Или вы изменяете набор результатов вашего сохраненного процесса, чтобы он возвращал нужные вам столбцы.
Это подразумевает динамический SQL или множество операторов IF. Который при некоторых обстоятельствах не будет анализироваться правильно (с помощью SET FMTONLY и т. Д.).
Возможно, вы пытаетесь закодировать против стороннего приложения или системных хранимых процедур (у нас нет полной информации), но это кажется грязным и неправильным. SQL Server 2005 имеет огромное количество DMV и каталогов (или каталогов, в зависимости от того, на какой стороне Атлантики вы находитесь), что устраняет необходимость в системных вызовах процедур.
Если вы пытаетесь имитировать некоторые аспекты ОО-дизайна (один процесс, чтобы сделать что-то для каждого), я бы не стал. Если вам нужен запрос, который повторяет 3 столбца из 30, то сделайте это. Это будет работать намного лучше, потому что неиспользуемые таблицы и столбцы будут игнорироваться в плане, на самом деле их не нужно включать.