如何在批处理时执行存储过程?

时间:2016-03-11 20:44:27

标签: sql sql-server sql-server-2012

我想通过从表中传递参数值来执行存储过程,批量大小为100.一旦对第一批100进行存储过程调用,继续下一批100并重复直到所有行在表中完成。该表有一个将更新的列,确保在我执行

时不会拾取相同的行
select top (batch_size) * 
from table

我的问题更多是关于如何为存储过程调用实现批处理。

编辑:添加了OP的评论:

示例,下面的table1有1000行。我的第一批是500行。为每一行调用一个存储过程。

CREATE TABLE table1 
(
    id INT IDENTITY, 
    col1 VARCHAR(100), 
    status VARCHAR(50)
) 

DECLARE @batch_size INT 
SET @batch_size = 5 

INSERT INTO table2 
    SELECT TOP(500) col1 
    FROM table1 
    WHERE status IS NULL 
    ORDER BY id 

SELECT TOP(1) 
    @id = id, @col1 = col1, @col2 = col2 
FROM table2 
ORDER BY id 

WHILE @@rowcount > 0  
BEGIN 
     EXEC SP param1 = col1, param2 = col2 

     UPDATE table1 
     SET status = 'closed' 

     SELECT TOP(1) @id = id, @col1 = col1, @col2 = col2 
     FROM table2 
     WHERE id > @id 
     ORDER BY id 
END

1 个答案:

答案 0 :(得分:0)

我并不是说你以最好的方式解决这个问题,但要回答你的问题,你可以简单地将你现有的代码放在一个检查的WHILE循环中

 WHILE EXISTS(SELECT * FROM Table1 WHERE Status IS NULL)

您的代码将一次获得500行的批次,直到Table1中没有更多的行为状态为NULL。