>经常,数据库任务需要执行由SQL查询检索的每行存储过程。本文概述了使用光标的解决方案,光标是迭代行处理的数据库机制。 基于光标的解决方案
此代码通过 作为参数执行。 替代方法 语句中通常是最有效的方法。 这避免了迭代处理的开销。<code class="language-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 the stored procedure for each row
EXEC uspYourSproc @field1, @field2;
FETCH NEXT FROM cur INTO @field1, @field2;
END;
CLOSE cur;
DEALLOCATE cur;</code>
sometable
>
someotherfield
>性能优化uspYourSproc
field1
虽然光标提供了一个清晰而简单的解决方案,但性能可能是一个问题。光标通常比基于集的操作效率低,尽管效率比手动field2
循环更有效。对于大型数据集,请首先考虑将数据加载到临时表中。 使用光标在临时表上迭代可以通过最大程度地减少表锁定问题来显着提高性能。
WHILE
以上是如何对 SQL 查询返回的每一行执行存储过程?的详细内容。更多信息请关注PHP中文网其他相关文章!