好记性不如烂笔头。

如何循环访问通过在 SQL Server 中使用事务处理 SQL 结果集

本文介绍了模拟中的存储的过程、 触发器或批处理事务处理 SQL 游标类似提取下一个逻辑可以使用的各种方法。

事务处理 SQL 语句用于循环访问结果集

有三种方法可用于循环访问结果集使用事务处理 SQL 语句。

一种方法是使用临时表。使用此方法,您创建初始的 SELECT 语句的"快照"并使用它作为基础的"指针"。例如:
/** example 1 **/ 

declare @au_id char( 11 )

set rowcount 0 select * into #mytemp from authors

set rowcount 1

select @auid = auid from #mytemp

while @@rowcount <> 0 begin set rowcount 0 select * from #mytemp where auid = @auid delete #mytemp where auid = @auid

set rowcount 1
select @au_id = au_id from #mytemp&lt;BR/&gt;

end set rowcount 0


第二种方法是使用min函数表的一行"走"一次。此方法捕捉后添加存储的过程开始执行,前提是该新行具有唯一标识符大于当前正在处理查询中的行的新行。例如:
/** example 2 **/ 

declare @au_id char( 11 )

select @auid = min( auid ) from authors

while @auid is not null begin select * from authors where auid = @auid select @auid = min( auid ) from authors where auid > @au_id end

注: 1 和 2 的两个示例假定存在源表中的每一行的唯一标识符。在某些情况下,可能存在不唯一的标识符。如果是这种情况,您可以修改要使用新创建的键列的temp表方法。例如:
/** example 3 **/ 

set rowcount 0 select NULL mykey, * into #mytemp from authors

set rowcount 1 update #mytemp set mykey = 1

while @@rowcount > 0 begin set rowcount 0 select * from #mytemp where mykey = 1 delete #mytemp where mykey = 1 set rowcount 1 update #mytemp set mykey = 1 end set rowcount 0