Если вы не можете изменить вызываемый SP, то, вероятно, проще всего будет использовать курсор:
DECLARE @f1 VARCHAR(255), @f2 VARCHAR(255) --, ...
DECLARE c CURSOR
LOCAL STATIC READ_ONLY FORWARD_ONLY
FOR SELECT Field1, Field2 --, ...
FROM #tempTable;
OPEN c;
FETCH NEXT FROM c INTO @f1, @f2 --, ...
WHILE @@FETCH_STATUS <> -1
BEGIN
EXEC usp_InsertSP
@param1 = @f1,
@param2 = @f2 --, ...
FETCH NEXT FROM c INTO @f1, @f2 --, ...
END
CLOSE c;
DEALLOCATE c;
Однако я настоятельно рекомендую изменить вызываемую процедуру.Существует почти абсолютно более эффективный способ работы с данными в этой таблице #temp, если вы можете изменить вызываемую процедуру для ее непосредственного использования.
EDIT
Демонстрациячто вызываемый процесс может видеть таблицу #temp, созданную вызывающей стороной.
CREATE PROCEDURE dbo.proc1
AS
BEGIN
SET NOCOUNT ON;
CREATE TABLE #t1(a INT);
INSERT #t1 SELECT 1 UNION SELECT 2;
EXEC dbo.proc2;
DROP TABLE #t1;
END
GO
CREATE PROCEDURE dbo.proc2
AS
BEGIN
SET NOCOUNT ON;
SELECT a FROM #t1;
END
GO
EXEC dbo.proc1;
Результаты:
a
-
1
2