对SQL Server表中的每一行执行存储过程

对SQL Server表中的每一行执行存储过程,sql,sql-server,sql-server-2008,stored-procedures,cursor,Sql,Sql Server,Sql Server 2008,Stored Procedures,Cursor,因此,我花了相当长的时间研究堆栈溢出问题,希望通过SQL来填充视图中的一个字段,以显示项目延迟的工作日数 该视图连接了MS SQL Server(2008)上两个本地表的数据,我已经编写了存储过程来计算两天之间的工作日,其调用方式为: EXECUTE spWorkDaysLate '01/01/20XX', '01/02/20XX' 但是,我不知道如何循环查看视图中的每个记录,因为这需要对表中的每个条目执行。我的表中的相关字段是startDate和endDate,我将使用上面存储过程的结果填充

因此,我花了相当长的时间研究堆栈溢出问题,希望通过SQL来填充视图中的一个字段,以显示项目延迟的工作日数

该视图连接了MS SQL Server(2008)上两个本地表的数据,我已经编写了存储过程来计算两天之间的工作日,其调用方式为:

EXECUTE spWorkDaysLate '01/01/20XX', '01/02/20XX'
但是,我不知道如何循环查看视图中的每个记录,因为这需要对表中的每个条目执行。我的表中的相关字段是startDate和endDate,我将使用上面存储过程的结果填充最终字段(daysLate),使用endDate和startDate作为参数。我在网上找到了一些建议,建议使用cursor命令在表中循环,这就是我想要运行的SQL:

DECLARE @MyCursor CURSOR;
DECLARE @MyField int;
SET @MyField = 'daysLate' /* Do need to do this, or is the an argument I pass? */

BEGIN
    SET @MyCursor = CURSOR FOR
    select top 1000 daysLate from dbo.vQualityControl


    OPEN @MyCursor 
    FETCH NEXT FROM @MyCursor 
    INTO @MyField

    WHILE @@FETCH_STATUS = 0
    BEGIN
      /*
         YOUR ALGORITHM GOES HERE   
      */

      FETCH NEXT FROM @MyCursor 
      INTO @MyField 
    END; 

    CLOSE @MyCursor ;
    DEALLOCATE @MyCursor;
END;
我对SQL相当陌生,因此我知道我想要运行的伪代码类似于一个for-each循环,在我看来,这就像:

WHILE @@FETCH_STATUS = 0
    BEGIN
      /* Bad code */
      daysLate.Value = EXECUTE spWorkDaysLate @startDate, @endDate;

      FETCH NEXT FROM @MyCursor 
      INTO @MyField 
    END; 

我知道这在语法上是错误的,那么我应该在循环中放置什么,以便用调用的存储过程的结果填充字段“daysLate”?

您是否尝试过函数,您可以在函数中计算两天之间的工作日

SELECT *, dbo.fn_WorkDaysLate (startDate, endDate) AS DaysLate FROM dbo.vQualityControl
--OR
UPDATE A
    SET A.DaysLate = dbo.fn_WorkDaysLate (A.startDate, A.endDate)
FROM dbo.vQualityControl A

首先,您想做什么,但不首先查看解决方案,因为大多数时候不了解根本问题会导致更多问题请执行我的存储过程,以便用结果填充“daysLate”字段。表中的每个记录都应该有一个唯一的结果。好的,那么SP中有什么?如果可以,您应该将存储过程编写为一个内嵌表值函数(如果没有,则为多语句表值函数),然后您可以将它用于带。----@SqlZim这就是我要去的地方。。。这可能是一个简单的过程,比如创建一个标量函数来返回日期,然后更新所需的表格。我将研究使用函数来代替它-谢谢!