当前位置: 首页 > news >正文

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:主要界面

– 触发器:视图,储存过程,游标,事务

http://www.lqws.cn/news/528175.html

相关文章:

  • 信创国产化替代中的开发语言选择分析
  • 4.2_1朴素模式匹配算法
  • 6月份最新代发考试战报:思科华为HCIP HCSE 考试通过
  • Java四种拷贝方式总结!一文扫清所有拷贝问题
  • npm run dev报错
  • 软件安装——下载安装ollama
  • leetcode 65
  • Autosar方法论
  • 力扣2311:小于等于K的最长二进制子序列
  • 【TIDB】了解,MySQL和TiDB的取舍,差异
  • postman设置接口关联,实现参数化
  • kotlin中::class.java的意义
  • Redis 为什么选用跳跃表,而不是红黑树
  • PHP基础2(流程控制,函数)
  • 【机器学习深度学习】交互式线性回归 demo
  • C语言再出发:2025年AI时代的关键语言
  • notepad++ 怎么快速给 python (nginx、shell) 文件加 # 注释
  • VUE3入门很简单(3)--- watch
  • MR30分布式 IO在物流堆垛机的应用
  • 解锁AI无限潜能!景联文科技数据产品矩阵再升级:多语言题库、海量语料、垂域代码库,全面赋能大模型训练
  • 力扣第45题-跳跃游戏2
  • 【智能记录系统Blinko】从0到1搭建个人云端笔记本:Blinko+Docker环境配置
  • JVM OutOfMemoryError原因及排查解决方案
  • java解决超大二维矩阵数组引起的内存占用过大问题
  • 深入解析synchronized实现原理
  • 【2-入门与调试设置】1.坐标辅助器与轨道控制器
  • 英特尔汽车业务败走中国,喊出“All in”才过两个月
  • 观测云产品更新 | 外部数据源、日志、监控、事件、基础设施等
  • TCP 协议安全性全面分析:漏洞、应用场景与防护策略
  • 芯谷科技--降压型DC-DC转换器D4005