SQL Server游标+延迟执行简介

时间:2022-06-01 00:07:52

在项目测试中,我们可能会使用批量生成数据来测试程序的性能。

这里讲一个我遇到的问题,由于我们批量生成数据时基本上是瞬间完成,所以GETDATE()函数获得的时间基本上也是一样的,而我们又要求生成每条数据的时间不同,那么如何来解决这个问题?

网上搜索了很多,这里我是使用游标+waitfor来处理的:

首先来讲下游标,因为个人也是才使用游标,而且也没有深入研究。

那么游标是用来干什么的呢?一般我们使用游标是用来对查询出来的结果集进行处理的(修改,新增...)。

T-SQL中的游标定义在MSDN中如下:

DECLARE cursor_name CURSOR [ LOCAL | GLOBAL ]
[ FORWARD_ONLY | SCROLL ]
[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
[ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]
[ TYPE_WARNING ]
FOR select_statement
[ FOR UPDATE [ OF column_name [ ,...n ] ] ]
[;]

游标的简单定义:declare 游标名 cursor for 结果集

开启游标:open 游标名

向下读取游标:fetch next from 游标名 into 接收从结果集中读取到的数据的变量

关闭游标:close 游标名

释放游标:deallocate 游标名
这里因为要使用游标对结果集进行遍历,那么我们必须要来介绍一个全局变量@@Fetch_Status

@@FETCH_STATUS 返回被 FETCH 语句执行的最后游标的状态,而不是任何当前被连接打开的游标的状态。

返回值 描述 0 FETCH 语句成功。 -1 FETCH 语句失败或此行不在结果集中。 -2 被提取的行不存在

这里只是介绍游标一些简单的用法。

下面我们再来介绍一下如何在数据库中使用延迟

waitfor delay '00:00:01'--一秒后执行print语句

print '我是延迟执行的'

waitfor delay '00:00:00.010'--10毫秒后执行print语句

print '我是延迟执行'

waitfor time '10:00:00'--十点执行print语句

print '我是延迟执行'