前言
我们在做查询报表编写进行测试的时候,需要很多的原始数据才能检测报表的准确度,如果通过软件里一步一步的操作生成原始数据会非常的耗时,所以才想写一个脚本来自动生成随机数据,方便进行测试。
准备工作
正常我们商业来说每销售一笔数据都会生成一笔流水,一般流水会有商品流水(即这笔销售里面都有什么商品),付款流水(即这笔流水里面用的哪种支付方式,如现金,银行卡,支付宝,微信等),还需要一个原始的商品资料表和一个支付方式的表,所以我们先建四个表,这里主要是为了给大家分享一下实现的方式,所以我们建的表都比较简单。
商品资料表
然后我们自己先插入一些模拟数据,插入数据这里很简单我就不再写了
支付方式
我们也插入一些支付方式的数据
商品流水表
付款流水表
这样我们的准备工作已经完成了
实现思路
我们可以自己设置一个变量定义要生成的流水笔数,然后做一个循环一笔一笔的进行生成,下面是主要介绍每笔流水生成的思路。
- 生成当前流水的流水号
- 生成当前流水的销售日期和销售时间
- 随机生成当前流水的商品流水数据
- 随机生成当前流水的付款流水数据
编写脚本
定义我们要用到的变量
初始设置一些基本的参数
开始进入循环插入,每次都要先初始化当前流水的交易总金额,防止计算出错
当每笔流水插入完后记得要把流水号加1,把要生成的流水笔数减1(防止死循环)
1.生成当前流水的流水号
流水号生成格式为当前年月日加四位的流水
select @lsh= RIGHT('000000' convert(varchar(4),@lsno),4)
用这个来先生成4位流水,如果前面不够4位的用0补齐,然后前面再加上当前的年月日
2.生成当前流水的销售日期和销售时间
销售日期我们默认为当前日期,时间是通过随机生成的,原理是小时随机生成不大于23的两位数,分钟和秒都是随机生成不大于59的两位数,用100 生成数再截取后面2位是防止只有个位数的话还需要再前面补0的操作
3.随机生成当前流水的商品流水数据
- select top (@nowspqty) 商品编码,商品名称,售价 from 商品信息 order by NEWID()这句后面的order by NewID()是查询后随机生成排序,通过top加我们要生成的商品个数,每次查询都会随机生成不同的商品信息
- 通过游标后进行数据的遍历,每一条数据遍历时随机生成销售的数量,并计算当前商品的销售额及总流水的销售额
- 将当前的商品写入商品的流水表里
4.随机生成当前流水的付款流水数据
- 首先随机获取本次流水的支付方式个数
- 随机抽取出本次流水的支付方式
- 计算当前支付流水的支付金额,原理:当只剩一笔支付情况下,我们就把剩余的总销售金额全部算到当前支付流水里,如果大于一笔的支付情况下,我们随机计算当前的支付金额(支付金额不大于剩余销售金额)
查询生成的结果数据
商品流水表数据
付款流水表数据
附脚本下载地址:
链接:https://pan.baidu.com/s/1Kt80cpwH8YAX7lu0GrRJHQ 密码:ti6e
-END-