我想通过从表中传递参数值来执行存储过程,批量大小为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
答案 0 :(得分:0)
我并不是说你以最好的方式解决这个问题,但要回答你的问题,你可以简单地将你现有的代码放在一个检查的WHILE循环中
WHILE EXISTS(SELECT * FROM Table1 WHERE Status IS NULL)
您的代码将一次获得500行的批次,直到Table1中没有更多的行为状态为NULL。