【Sql Server】数据库的表变量和临时表的区别,并通过变量表随机生成姓名

作者:小5聊

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

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

 效果

【Sql Server】数据库的表变量和临时表的区别,并通过变量表随机生成姓名_第1张图片

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之间的小数值,比如

【Sql Server】数据库的表变量和临时表的区别,并通过变量表随机生成姓名_第2张图片

round(),默认是四舍五入

  • 代码


declare @classCount int
set @classCount=3
declare @className nvarchar(50)
set @className=''
declare @courseName nvarchar(50)
set @courseName='C语言'
declare @studentName nvarchar(50)
set @studentName=''
declare @scoreValue int
declare @studentCount int

while(@classCount>0) begin
    print(@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 @studentCount=30
    while(@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 int
        set @nameLength=1+round(rand()*1,0)
        set @name=(select name from @surnameTable where id=round(rand()*20+1,0))
        
        while(@nameLength>0) begin
            set @name+=(select name from @nameTable where id=round(rand()*20+1,0))
            set @nameLength-=1
        end
        
        set @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-=1
    end
    --
    
    set @classCount-=1
end



select * from ClassCourseStuentScoreTable
--truncate table ClassCourseStuentScoreTable
  • 效果

【Sql Server】数据库的表变量和临时表的区别,并通过变量表随机生成姓名_第3张图片

2、临时表

2.1、临时表基本信息

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

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

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

【Sql Server】数据库的表变量和临时表的区别,并通过变量表随机生成姓名_第4张图片

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

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

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

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

2.2、临时表的作用

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

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

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

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

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

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

你可能感兴趣的:(sql,server,数据库,sql,server)