Sybase数据库——批量插入数据存储过程

向一个表中插入N条数据的存储过程,其中用到了生成随机数、日期差、循环、选择等。在Sybase数据库中编写的,其他数据库没有试过是否兼容,仅供参考。


在取随机数的时候我使用的是先转成字符串,然后截取右边数,再转为int型的方法。还有人提到可以给rand()乘以一个100或者1000,然后取整,但我认为这个方法不太严谨。


因为rand()取出的是一个0~1之间的随机数,也就是说是有可能出现0.0000323525这种情况,即使乘以一个非常大的数字,从理论上也是有可能出现问题的,所以自认为还是


采用截取右边的字符串方式更为严谨。


下面是sql存储过程:


--可以修改执行存储过程的输入参数,实现插入N条数据的目的
--其中出生日期、姓名、性别、ID都是随机生成的,年龄根据出生日期确定
--创建表
IF EXISTS (SELECT id FROM sysobjects WHERE type='U' AND name='T_USER')
DROP TABLE T_USER
GO
CREATE TABLE T_USER(
   id       VARCHAR(36),
   name     VARCHAR(50),
   age      INTEGER,
   gender   CHAR(4),
   birthday DATETIME
)
GO
--删除存储过程
IF EXISTS (SELECT id FROM sysobjects WHERE type='P' AND name='INSERT_USERS')
DROP PROCEDURE INSERT_USERS
--创存储过程
CREATE PROCEDURE INSERT_USERS
        @number INTEGER
AS

DECLARE 
        @i INTEGER,          --循环变量
        @name VARCHAR(50),   --姓名
        @str  VARCHAR(26),   --英文字母    
        @age INTEGER,        --年龄
        @l_UUID VARCHAR(36), --主键UUID
        @gender CHAR(4),     --性别
        @gender_num INTEGER, --性别代码
        @name_size  INTEGER, --姓名长度
        @birthday   DATETIME --生日
BEGIN

SELECT @i = 0
SELECT @str = 'abcdefghijklmnopqrstuvwxyz'
 
 WHILE @i<@number
BEGIN 

SELECT @l_UUID = NEWID()

SELECT @name_size = (SELECT CAST(RIGHT(CAST(rand() AS VARCHAR(50)),1) as int))

SELECT @name ='' 
 
WHILE  @name_size > 0
BEGIN
SELECT @name =@name + substring(@str,(SELECT CAST(RIGHT(CAST(rand() AS VARCHAR(50)),2) as int))%26,1)
SELECT @name_size = @name_size - 1
END

SELECT @gender_num = (SELECT CAST(RIGHT(CAST(rand() AS VARCHAR(50)),1) as int))

IF @gender_num/2 = 0
SELECT @gender = '女'

ELSE
SELECT @gender = '男'

SELECT @birthday = dateadd(day,-floor(rand()*30000),getdate())

SELECT @age = datediff(yy,@birthday,getdate())

INSERT INTO T_USER
(
    id,
    name,
    age,
    gender,
    birthday
)
VALUES
(
    @l_UUID,
    @name,
    @age,
    @gender,
    @birthday
)

SELECT @i = @i + 1
END

SELECT * FROM T_USER
END

--存储过程结束

--执行存储过程
GO 
DECLARE   @number INTEGER
EXEC INSERT_USERS 100000        --插入数据量,可修改
GO

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值