我有一个以某种方式更改用户数据的存储过程。我将它传递给 user_id,它就完成了。我想在一个表上运行一个查询,然后对于每个 user_id 我发现在那个 user_id 上运行一次存储过程
我将如何为此编写查询?
使用光标
附录:[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 更新语句运行,那将是最佳的