2014-02-24 22 views
1

我有一个基于某些条件从表中检索数据并将其插入临时表的过程。如何使用表中的值执行存储过程

我现在想要使用我的临时表中的值来执行另一个过程,这个过程将有大约2000个条目。

我可以在单个EXEC中执行此操作,并从我的#Temp表中选择所有条目吗?

我想要做这样的事情:

DECLARE @return_value int 
EXEC @return_value = [dbo].[prInsertAssessmentLevels] 
     @WFRouteItemID = (SELECT WFRouteItemID FROM #WFsNotInWFAssessmentLevel), 
     @UOB = (SELECT UOB FROM #WFsNotInWFAssessmentLevel WHERE WFRouteItemID = @WFRouteItemID), 
     @Life = (SELECT Life FROM #WFsNotInWFAssessmentLevel WHERE WFRouteItemID = @WFRouteItemID), 
     @Health = (SELECT Health FROM #WFsNotInWFAssessmentLevel WHERE WFRouteItemID = @WFRouteItemID), 
     @Disability = (SELECT Disability FROM #WFsNotInWFAssessmentLevel WHERE WFRouteItemID = @WFRouteItemID), 
     @CreatedUserID = 1 

回答

1

你需要一个光标

DECLARE @return_value int 
DECLARE @WFRouteItemID int /* Or whatever the correct Type is*/ 
DECLARE @UOB   int /* Or whatever the correct Type is*/ 
DECLARE @Life   int /* Or whatever the correct Type is*/ 
DECLARE @Health   int /* Or whatever the correct Type is*/ 
DECLARE @Disability  int /* Or whatever the correct Type is*/ 
DECLARE @CreatedUserID int /* Or whatever the correct Type is*/ 

DECLARE PARAM_CURSOR CURSOR FOR 
SELECT WFRouteItemID, UOB, Life, Health, Disability, CreatedUserID 
FROM #WFsNotInWFAssessmentLevel 


OPEN PARAM_CURSOR 
FETCH NEXT FROM PARAM_CURSOR INTO @WFRouteItemID, @UOB, @Life, @Health, @Disability, @CreatedUserID 
WHILE @@FETCHSTATUS = 0 
BEGIN 

EXEC @return_value = [dbo].[prInsertAssessmentLevels],@WFRouteItemID, @UOB, @Life, @Health, @Disability, @CreatedUserID  

FETCH NEXT FROM PARAM_CURSOR INTO @WFRouteItemID, @UOB, @Life, @Health, @Disability, @CreatedUserID 
END 
CLOSE PARAM_CURSOR 
DEALLOCATE PARAM_CURSOR 
1

你想要做的更像是通过你的桌子去行由行和所有的列值执行存储过程。让我给你一个模板,一个基于光标的方法:

DECLARE curName CURSOR FOR 
     SELECT col1, col2, col3 
     FROM your_table 

OPEN curName 
     FETCH NEXT FROM curName INTO @pk 
     WHILE @@FETCH_STATUS = 0 
     BEGIN 
      EXEC your_Procedure (@par1 = @col1, @par2 = @col2, @par3 = @col3) 
      FETCH NEXT FROM curName INTO @col1, @col2, @col3 
     END 
CLOSE curName 

DEALLOCATE curName