SQL变量声明与赋值 分支 循环
– 变量 分支 循环
– declare 变量名 数据类型
– declare 关键字,作用声明变量
– 变量名:以@开头
– 数据类型:数据库中支持的数据类型:int varchar(n) text char(n) nvarchar(n)
nchar(n)
declare @name varchar(255)
– 定义多个变量
declare @No varchar(255),@Price int
– 变量赋值,仅支持给一个变量赋值
set @name = '活着'
– 查看变量赋值的结果
print @name
– 以为表格方式 查看变量赋值
--select @name 属性名
– 多个变量赋值,执行多次set
set @No = '231025'
set @Price = 23
use BookDB
– 将子查询的查询结果,赋值给变量
set @Price = (select Price from BookInfos where BookName='活着')
print @Price
– 将查询结果直接赋值给变量,注意:如何有多个记录,赋值最有一个结果
select @Price=Price from BookInfos where BookName='活着'
print @Price
– 同时给多个变量赋值
select @name='test',@no='53232'
print @name+@no
分支语句
–========================= 双分支 =====================
declare @age int
set @age = 23-- if..else..分支语句if(@age>18) -- if(条件表达式)
begin
print '成年人'
end
else --false
begin
print '未成年人'
end
–========================== 多分枝 =================
declare @age int
set @age = 25
if(@age>60)
begin print '老年人'
end
else if (@age>40 and @age<=60)
begin print '中年人'
endelse if(@age>25)
beginprint '青年人'
end
else if(@age>0)
begin print '少年'
end
else
begin print '不是人'
end
–============================ 嵌套分支 =====================
declare @age int
set @age = 7
if(@age<18)
begin if(@age <10)begin print '小孩'endelse beginprint '未成年'end
end
– 分支练习
use BookDB
go
-- object_id() 返回实例的id
if(object_Id('BookInfos','U') is not null)print 'BookInfo 表存在'
else print '不存在'-- 验证记录是是否存在
if(exists(select BookId from BookInfos))print '存在'
else print '不存在'use master
go
-- 验证数据库是否存在
if(exists(select * from sys.databases where name='BookDB'))print 'BookDB 数据库存在'
else print 'BooDB不存在'
–================== 验证表是否存在 =========
use BookDB
go
if(exists(select * from sys.objects where name = 'BookInfos'))print '表存在'
else print '不存在'-- 什么时候需要用到验证数据库与表是否存在,
-- 新建数据库与表之前需要先验证表是否存在,存在,先删除再新建--- 需求:使用sql 练习新建数据 表 插入数据...-- 新建数据库之前,使用 master
use master
go
declare @DBName varchar(255)
set @DBName = 'MyMISDB'
-- 验证数据库是否存在
-- exists()
-- not exists()
-- 如果数据库名为:MyMISDB 存在
if(exists(select * from sys.databases where name =@DBName ))
begindrop database MyMISDBprint '删除数据库:'+ @DBName +'成功'
end
–========= 新建数据库:主文件,从文件,日志文件 =====
create database MyMISDB
on primary -- 主文件
(name='MyMISDB',fileName='D:\3上位机6班\1sql_server\07\database\MyMISDB.mdf',size=100MB,filegrowth= 1%
)
,
( -- 从文件name='MyMISDB_data',fileName='D:\3上位机6班\1sql_server\07\database\MyMISDB_data.ndf',size=10MB,filegrowth= 1%
)
log on -- 日志文件
(name='MyMISDB_log',fileName='D:\3上位机6班\1sql_server\07\database\MyMISDB_log.ldf',size=10MB,filegrowth= 1%
)
print '新建'+@DBName +'数据库成功'
-- go 阻断变量的作用域
use MyMISDBprint '使用:'+ @DBName +'数据库'
–===================== 创建表 ============================
–============= 新建表:部门 =====================
if exists( select * from sys.objects where name = 'Department' )
begin drop table Departmentprint '删除:Department 成功'
end
print '开始新建 Department 表.....'
create table Department
(-- 属性名,类型 ,约束DepartmentId int primary key identity(10,1),DepartmentName varchar(255) not null)
print '新建Department表成功'
–======================== 职位表 =================
if exists( select * from sys.objects where name = 'Post' )
begin drop table Postprint '删除职位表:Post 成功'
end
print '开始新建 Post 表.....'create table Post
(-- 属性名,类型 ,约束PostId int primary key identity(10,1), -- 职位id PostName varchar(255) not null -- 职位名
)
print '新建Post表成功'
–======================= 员工表 ==================
if exists( select * from sys.objects where name = 'Employee' )
begin drop table Employeeprint '删除员工表:Employee 成功'
end
print '开始新建 Employee 表.....'create table Employee
(-- 属性名,类型 ,约束EmployeeId int primary key identity(101,1), -- 员工idEmployeeName varchar(255) not null, -- 员工名称Gender varchar(2) not null,NowAddress varchar(255) default('地址不详'), -- 家庭住址IdNo varchar(255) unique not null check(len(IdNo)=18) , -- 身份号码WeiXinNumbser varchar(255) not null , -- 微信号码PhotoNumber varchar(255) not null, -- 手机号码OtherWork varchar(255) not null , -- 工作信息EntryData Datetime not null, -- 入职时间-- 关联其他表-- 为什么不直接保存部门名称和职位名称-- 1: 因为数据重复录入-- 2:不符合OOP 面向对象,明确性原则PostId int references Post(PostId) not null, -- 外键 职位编号DepartmentId int references Department(DepartmentId) not null, -- 外键 部门编号
)
print '新建Employee表成功'
go
–=添加数据=
print '开始添加数据'
use MyMISDB
go
insert into Department(DepartmentName) values
('研发部门'),('财务部门'),('行政部门'),('测试部门'),('实验部门'),('人事部门')insert into Post(PostName)values
('软件工程师'),
('测试工程师'),
('实施工程师'),
('财务经理'),
('人事经理'),
('行政主管'),
('出纳'),
('上位机开发工程师'),
('算法工程师')insert into Employee (EmployeeName, Gender, NowAddress, IdNo, WeiXinNumbser, PhotoNumber, OtherWork, EntryData, PostId, DepartmentId)values
('江平安','男','天津','123226199012111510','thinger01','13600001201','暂无','2020-01-01',10,10),
('申向前','男','北京','123226199012111511','thinger02','13600001202','暂无','2020-01-02',11,11),
('刘威','男','上海','123226199012111512','thinger03','13600001203','暂无','2020-01-03',12,13),
('韩亮亮','男','广州','123226199012111513','thinger04','13600001204','暂无','2020-01-04',10,10),
('韩兵','男','苏州','123226199012111514','thinger05','13600001205','暂无','2020-01-05',12,12),
('杜帅兵','男','南宁','123226199012111515','thinger06','13600001206','暂无','2020-01-06',10,10),
('唐晨牧','男','德州','123226199012111516','thinger07','13600001207','暂无','2020-01-07',11,11),
('郭子华','男','衢州','123226199012111517','thinger08','13600001208','暂无','2020-01-08',12,12),
('胡胜南','女','西安','123226199012111518','thinger09','13600001209','暂无','2020-01-09',10,10),
('杨玉','女','咸阳','123226199012111519','thinger10','13600001210','暂无','2020-01-10',11,11),
('郑琳','女','沈阳','123226199012111520','thinger11','13600001211','暂无','2020-01-11',14,14)print '三个表数据添加完成'
– 循环
declare @index int
set @index = 0
while (@index <5) -- 循环语句
begin -- {print @indexset @index += 1
end -- }
– 练习:每次脚本执行; 自动生成订单编号。20250625171500001 并插入数据
– 1:登录界面:(人事经理)
– 2:主要界面
– 触发器:视图,储存过程,游标,事务