2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 【Sql Server】数据库变量表和临时表的区别 并运用变量表遍历和随机生成姓名记录

【Sql Server】数据库变量表和临时表的区别 并运用变量表遍历和随机生成姓名记录

时间:2020-08-01 05:46:27

相关推荐

【Sql Server】数据库变量表和临时表的区别 并运用变量表遍历和随机生成姓名记录

作者:小5聊

简介:一只喜欢全栈方向的程序员,欢迎咨询,尽绵薄之力答疑解惑

公众号:有趣小馆,一个有趣的关键词回复互动功能

目录

1、表变量

1.1、表变量基本信息

1.2、表变量使用场景

1.3、表变量运用描述

2、定义变量

2.1、定义变量代码

2.2、代码定义说明

2.3、循环代码

2.4、姓氏和名字代码

2.5、查询看效果

3、临时表

3.1、临时表基本信息

3.2、临时表的作用

1、表变量

1.1、表变量基本信息

1)表变量本质是一个变量

是SQL Server 2000版本以及自后版本引入的概念

2)它具有正式表的大部分属性

比如:表字段、数据类型、主键、唯一、CHECK和DEFAULT、CHECK和DEFAULT约束

3)它不具备的功能

比如:不支持约束命名、不支持索引、不支持外键等,仅仅是用于对数据的DML操作(增删改查),可以当做一个临时数据集来使用

1.2、表变量使用场景

仅在需要临时作为数据结果集时使用,并且数据最好不要超过1千条记录

比如:随机生成姓名,姓氏记录一般使用常用的百家姓,一百条记录即可,名字同样可以设置在100到1000个字

1.3、表变量运用描述

通过变量表,随机生成两个字或者三个字的姓名

1)可以先找百家姓中,排20的姓氏

2)再找比较优雅的50个字

3)随机函数和取整函数

rand(),默认是随机产生0~1之间的小数值,比如

round(),默认是四舍五入

2、创建学生成绩表

CREATE TABLE [dbo].[ClassCourseStuentScoreTable]([id] [int] IDENTITY(1,1) NOT NULL,[className] [nvarchar](50) NULL,[courseName] [nvarchar](50) NULL,[studentName] [nvarchar](50) NULL,[scoreValue] [int] NULL,[addTime] [datetime] NULL,PRIMARY KEY CLUSTERED ([id] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]

3、定义变量

3.1、定义变量代码

sql server数据库和其他开发语言一样,都有变量的概念,不同开发语言,定义标识和方式还是有区别的,这个主要还是决定在创始人的习惯和行业规范上,千变万化不离其中,这就是编程的魅力

-- 班级数量declare @classCount intset @classCount=3-- 班级名称declare @className nvarchar(50)set @className=''-- 课程名称declare @courseName nvarchar(50)set @courseName='C语言'-- 学生名称declare @studentName nvarchar(50)set @studentName=''-- 学生课程成绩declare @scoreValue intdeclare @studentCount int

3.2、代码定义说明

1)班级数量

这里主要固定3个班级,所以直接赋值3

2)班级名称

根据遍历班级数量,通过需要进行逻辑赋值,可以设置为软件1班,软件2班,软件3班

3)课程名称

因为是指定C语言这门课程是,所以直接赋值“C语言”即可

4)学生名称

学生名称就是通过固定范围的姓氏和50个优雅的字,进行随机组合成姓名,姓氏是固定1位长度,名字随机2位或者3位长度

5)学生成绩

由于是指定了“C语言”课程,所以对应的就是“C语言”成绩,同样的随机生成分数

3.3、循环代码

循环遍历生成姓名记录,这里就涉及到一定的逻辑在里面了,第一层循环是班级,第二层循环是班级对应的学生人数,第三层逻辑就是姓氏和名字的随机值

第一层遍历班级代码

while(@classCount>0) beginprint(@classCount)if(@classCount=3)set @className='11软件3班'else if(@classCount=2)set @className='11软件2班'else if(@classCount=1)set @className='11软件1班'set @classCount-=1print(@className)end

第二层循环学生代码

--set @studentCount=30while(@studentCount>0) begin-- ===随机姓名===-- 定义一个姓氏表变量,表添加两个字段,自增编号和名字declare @surnameTable table(id int identity(1,1) primary key, name nvarchar(10))-- 定义一个名字表变量,表添加两个字段,自增编号和名字declare @nameTable table(id int identity(1,1) primary key, name nvarchar(10))insert @surnameTable values('王'),('李'),('张'),('刘'),('陈'),('杨'),('黄'),('赵'),('周'),('吴'),('徐'),('孙'),('马'),('胡'),('朱'),('郭'),('何'),('罗'),('高'),('林')insert @nameTable values('芸'),('荷'),('星'),('秋'),('嘉'),('娜'),('珊'),('菲'),('素'),('嫣'),('慧'),('慕'),('歆'),('巧'),('绮'),('羽'),('静'),('柔'),('采'),('沐'),('苑'),('姣'),('芳'),('宁'),('沛'),('玥'),('文'),('如'),('悦'),('若'),('德'),('蕾'),('颜'),('依'),('盼'),('菀'),('秀'),('草'),('莺'),('倩'),('柳'),('娴'),('彨'),('舒'),('雅'),('淑'),('冉'),('云'),('凝'),('棋')-- 生成名字declare @name nvarchar(50)declare @nameLength intset @nameLength=1+round(rand()*1,0)set @name=(select name from @surnameTable where id=round(rand()*20+1,0))while(@nameLength>0) beginset @name+=(select name from @nameTable where id=round(rand()*20+1,0))set @nameLength-=1endset @studentName=@name-- ===/随机姓名===set @scoreValue=30+round(rand()*70,0)insert into ClassCourseStuentScoreTable(className,courseName,studentName,scoreValue,addTime)values(@className,@courseName,@studentName,@scoreValue,getdate())set @studentCount-=1end--

3.4、姓氏和名字代码

一般添加一条记录的时候,直接就是一个values后面接一个括号,如果要同时添加多条,那么直接就是以逗号隔开,多少个括号就是多少条记录,这也算是数据库添加多条记录的一种规范和写法,接触多了就会发现不一样的写法,挺有意思的

-- 姓氏insert @surnameTable values('王'),('李'),('张'),('刘'),('陈'),('杨'),('黄'),('赵'),('周'),('吴'),('徐'),('孙'),('马'),('胡'),('朱'),('郭'),('何'),('罗'),('高'),('林')-- 名称insert @nameTable values('芸'),('荷'),('星'),('秋'),('嘉'),('娜'),('珊'),('菲'),('素'),('嫣'),('慧'),('慕'),('歆'),('巧'),('绮'),('羽'),('静'),('柔'),('采'),('沐'),('苑'),('姣'),('芳'),('宁'),('沛'),('玥'),('文'),('如'),('悦'),('若'),('德'),('蕾'),('颜'),('依'),('盼'),('菀'),('秀'),('草'),('莺'),('倩'),('柳'),('娴'),('彨'),('舒'),('雅'),('淑'),('冉'),('云'),('凝'),('棋')

3.5、查询看效果

select * from ClassCourseStuentScoreTable--truncate table ClassCourseStuentScoreTable -- 可以清空多次查看效果

4、临时表

4.1、临时表基本信息

1)SQL Server的临时表是一种特殊的表

2)表名字是以#或者##打头

3)SQL Server均把临时表结构信息和数据存储在Tempdb数据库下

4)一个#前缀的临时表称为局部临时表

局部临时表仅当前进程可见,其他进程不可访问,对于生命周期而言,它会随着当前连接进程的关闭而结束

5)两个##前缀的临时表称为全局临时表

全局临时表对所有进程可见,当前进程和其他进程均可访问,对于生命周期而言,所有使用到全局临时表的连接完全关闭后,临时表才结束

4.2、临时表的作用

1)临时表的作用和表变量类似,均是用于暂时缓存数据

2)临时表的数据会被储存在Tempdb的物理文件磁盘上

3)当查询临时表时,会将临时表中数据从磁盘文件读入SQL Server Buffer Pool(缓存池)里,然后返回查询结果

4)临时表的查询,对数据的存储和读取会有物理的IO写入和读取

5)临时表相较于表变量可以存储稍微大量一些的数据

比如数据量超过1万条记录数,数据空间占用量超过10MB

一张图总结两者的比较

总结:掌握了临时表变量和临时表,对于初始化表数据是非常有用的!

小5聊往期【Sql Server】相关文章

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。