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
    评论
实验三 数据查询实验 一. 实验目的 通过对实验二中建立的学生数据库关系表和视图的各种查询的操作,加深对SQL查询语言的了解,掌握相关查询语句的语法和使用方法。 二. 实验要求 (1) 用SQL语句完成以上操作 (2) 要求学生独立完成以上内容。 (3) 实验完成后完成要求的实验报告内容。 三. 实验环境 操作系统:Microsoft Windows 7旗舰版 (32位)。 硬件:容量足以满足Sybase 12.5.1安装及后续实验的使用。 软件:数据库版本:Sybase 12.5.1 。 四. 实验内容 1. 数据库关系表查询: (1) 简单的查询操作,包括单表的查询、选择条件、结果排序等的练习; (2) 多表的连接查询,包括等值连接、自然连接等; (3) 复杂的查询操作,包括使用分组函数等库函数的查询操作; (4) 练习带有IN、比较符的嵌套查询。 具体内容包括: (1)在简单查询实验中,在sql语句完成以下查询操作: 查询“数据库原理”课程的学分; 查询选修了课程编号为“C01”的学生的学号和成绩,并将成绩按降序输出; 查询学号为“31401”的学生选修的课程编号和成绩; 查询选修了课程编号为“C01”且成绩高于85分的学生的学号和成绩。 (2)在多表连接的查询实验中,在SQL SERVER提供的交互式语言环境下用Transact SQL语句完成以下查询操作: 查询选修了课程编号为“C01”且成绩高于85分的学生的学号、姓名和成绩; 查询所有学生的学号、姓名、选修的课程名称和成绩; (3)在复杂查询实验中,用 SQL语句完成以下查询操作: 查询至少选修了三门课程的学生的学号和姓名; 查询所有学生的学号和他选修课程的最高成绩,要求他的选修课程中没有成绩为空的。 (4)在嵌套查询实验中,在MySQL 5.5提供的交互式语言环境下用iSQL语句完成以下查询操作,要求写嵌套查询语句 查询选修了数据库原理的学生的学号和姓名; 查询没有选修数据库原理的学生的学号和姓名; 查询至少选修了学号为“31401”的学生所选修的所有课程的学生的学号和姓名。 2. 视图查询: 对实验二建立的视图进行相关的查询操作,如: 查询选修了课程编号为“C01”的学生的学号和成绩; 查询所有学生的学号、姓名、选修的课程名称和成绩; 查询选修了数据库原理的学生的学号和姓名。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值