在项目测试中,我们可能会使用批量生成数据来测试程序的性能。
这里讲一个我遇到的问题,由于我们批量生成数据时基本上是瞬间完成,所以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 ‘我是延迟执行‘