小编典典

如何为查询返回的每一行执行一次存储过程?

all

我有一个以某种方式更改用户数据的存储过程。我将它传递给 user_id,它就完成了。我想在一个表上运行一个查询,然后对于每个 user_id 我发现在那个
user_id 上运行一次存储过程

我将如何为此编写查询?


阅读 119

收藏
2022-06-10

共1个答案

小编典典

使用光标

附录:[MS SQL 游标示例]

declare @field1 int
declare @field2 int
declare cur CURSOR LOCAL for
    select field1, field2 from sometable where someotherfield is null

open cur

fetch next from cur into @field1, @field2

while @@FETCH_STATUS = 0 BEGIN

    --execute your sproc on each row
    exec uspYourSproc @field1, @field2

    fetch next from cur into @field1, @field2
END

close cur
deallocate cur

在 MS SQL 中,这是一篇示例文章

请注意,游标比基于集合的操作慢,但比手动 while 循环快;此 SO question
中的
更多详细信息

附录 2:如果您要处理的记录不止几条,请先将它们拉入临时表,然后在临时表上运行游标;这将防止 SQL 升级为表锁并加快操作

附录 3:当然,如果您可以内联存储过程对每个用户 ID 所做的任何事情,并将整个事情作为单个 SQL 更新语句运行,那将是最佳的

2022-06-10