
1、创建测试表,
create table test_loop(id varchar2(20),remark varchar2(20))
2、循环插入测试数据;
begin
for i in 1..100 loop
insert into test_loop
values(i,'level_'||i)
end loop
commit
end
3、查询表中全量数据;select t.*, rowid from test_loop t
4、编写语句,查询表中记录数,可以看到结果为100;
select count(*) sec from test_loop t
CREAT PROCEDURE testerAS
BEGIN
SET NOCOUNT ON
DECLARE @userId varchar(50)
DECLARE @count int
SET @count = 0
SELECT @count = count(*) FROM UserService_User WHERE Account like '%111%'
WHILE @count >0
BEGIN
SELECT @userId = Id FROM UserService_User WHERE Account like '%111%'
exec UserService_RemoveUserByUserId @userId
SET @count = @count -1
END
END
说明:
1、此存储过程在SQL SERVER 2005上测试通过,值得注意的是,循环体中,语句是使用BEGIN……END包括的,而不是网络上常说的WHILE ……END WHILE结构,其他的循环语句,如LOOP ……UNTIL……END LOOP也不能通过编译,也许是版本的问题,但在SQL SERVER2005中,循环体使用BEGIN……END就可以,而不能使用网络上常说的WHILE ……END WHILE结构。
2、循环体中 UserService_RemoveUserByUserId 是一个存储过程的名称,@userId为该存储过程的参数,如果有多个参数,使用“,”分开就可以了,这也是存储过程调用另一个存储过程的一种方法。
已经测试,创建并运行下面的存储过程可以循环添加数据:create procedure dowhile()
begin
declare i int default 0
start transaction
while i<50 do
insert into users(userId,userName,userPwd) values(null,concat('s00',i),123456)
set i=i+1
end while
commit
end
delimiter
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)