use*_*365 1 sql-server-2008 sql-server cursors
我WAITFOR在以下脚本中与游标结合使用:
create table orders(orderId int primary key,productId int,productName varchar(20));
insert into orders values(1,11,'book');
insert into orders values(2,13,'flower');
insert into orders values(3,24,'microwave');
insert into orders values(4,7,'food');
insert into orders values(5,46,'clothes');
declare cur cursor for
select * from orders;
open cur;
fetch next from cur;
while(@@fetch_status=0)
begin
waitfor delay '00:00:01';
fetch next from cur;
end;
close cur;
deallocate cur;
Run Code Online (Sandbox Code Playgroud)
我希望每 1 秒的指定间隔显示来自光标的一条记录。例如:显示第一行,然后等待一秒钟;显示第二行,然后稍等;等等。上面的光标不会这样做。说orders有 5 行。该WHILE块等待 5 秒钟,然后一起显示所有记录。
这是游标的错吗?如何修改此脚本以按预期工作?
RAISERROR('', 0, 1) WITH NOWAIT在将缓冲区中的任何内容刷新到客户端(SSMS?)的延迟之前添加,否则 SQL Server 将等待更多数据来填充数据包。
Declare cur cursor for
select * from orders
open cur
fetch next from cur
while(@@fetch_status=0)
begin
RAISERROR('', 0, 1) WITH NOWAIT
WAITFOR DELAY '00:00:01'
fetch next from cur
end
close cur
deallocate cur
Run Code Online (Sandbox Code Playgroud)