在MSSQL里,我们可以使用Cursor来实现数量循环处理。但是Cursor有一个问题,就是效率慢。当然,如果机器性能很好的服务器就例外。我在这里介绍一个简单的方法,可以替代Cursor。在简单的,处理数据不是很多的情况下,应该可行的。我自己的程序里,间中会使用到。
以下用一个例子来解释:
declare @i int -- 要循环的行数
declare @id int
declare @firstname varchar(20)
declare @lastname varchar(20)
declare @ids table (id int primary key) --拿来保存已经处理了的id
select @i=count(id) from users where firstname>'Michael'
while @i>0
begin
--- 拿出一行来处理
select top 1 @id=u.id, @firstname=firstname, @lastname=lastname from users u
where firstname='Michael' and not exists(select id from @ids where id=u.id)
--- 把已经拿出的id保存起来
insert into @ids (id) values(@id)
-- 处理
print @firstname+' '+@lastname
-- 下一条记录。
set @i=@i-1
end
例子里,我先拿出要循环的次数,目的是防止死循环。有些时候,编写逻辑一混乱,就会造成死循环。所以我没有使用一种循环到没有记录为止的循环。