数据库生成简单的测试数据

代码实现测试数据

当需要手动在添加数据库添加测试数据时,如果数据量大是绝对不考虑亲手一条一条输入的,此时选择用sql循环写入数据。
例如图示结构的一张表
在这里插入图片描述
其中,ObjID和EquipID都设置为从1递增的整数,TireCode和StationCache是不重要的字段随意赋值,VulNum、LocNum、CatchNum在业务上为0或1或2的整数。要生成100条测试数据,那么写这样一段SQL:

truncate table WCSVulStatus
DECLARE @i int
DECLARE @vul int
DECLARE @loc int
DECLARE @catch int
Set @i = 1
WHILE @i < 101 BEGIN
set @vul = cast(round(100*rand(),0)as int) % 3
set @loc = cast(round(100*rand(),0)as int) % 3
set @catch = cast(round(100*rand(),0)as int) % 3
insert into WCSVulStatus values(@i,@i,'1','null',@vul,@loc,@catch)
Set @i =@i +1
END
GO
SELECT * FROM WCSVulStatus

这段代码清空了WCSVulStatus表里原有的数据并插入了100条测试数据,每条测试数据的VulNum,LocNum,CatchNum都是随机生成的(不必纠结这里的概率不等问题)。
然而在写这段代码时踩到一个坑,我所需要的0,1,2这三个数字可以通过用3对一个随机整数取余得到,可我却没有关注到这个随机整数的细节。
执行select round(100*rand(),0) ,我们可以获得一个100以内的随机整数,当我直接用3去对它取余时,select round(100*rand(),0) % 3 ,却得到了这个报错信息数据类型 float 和 int 在 modulo 运算符中不兼容。。也就是说,虽然前面看似拿到了整数,但它本质还是一个float类型的数据,不能用来做取余运算(原因不明)。
于是决定使用cast做一个类型转换,能够正常运行。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值