T-SQL学习笔记
程序员文章站
2022-04-15 15:27:01
学习T SQL时记录的笔记,记得并不全也不详细
学习t-sql时记录的笔记,记得并不全也不详细
if和while语句
declare @age int select @age = datediff(year,stuage,getdate()) from tbstudent where stuname = '孙悟空' if(@age>=18) begin --必须有begin..end print n'已成年' end else begin print n'未成年' end
declare @sum int set @sum = 0 declare @i int set @i = 1 while(@i <= 100) begin if(@i % 2 <> 0) begin set @sum = @sum + @i end set @i = @i + 1 end print @sum
自定义函数
分为标量函数、表值函数(内联表值函数和多语句表值函数)
标量函数:只返回一个基础类型数据的值
-- 语法 create function 函数名 ([参数列表]) 可以不写参数,先写变量名再写类型 returns 返回值类型 as begin -- ······函数体语句 return 返回值 end
表值函数:返回一个table类型的结果集
内联表值函数
-- 语法 create function 函数名 ([参数名]) returns table as return (一条select语句)
多语句表值函数
多语句表值函数可以看作是标量函数和内联表值函数的结合体
-- 语法 create function 函数名([参数列表]) returns 表变量名 table (表变量的字段定义) as begin sql return 这里啥都不写 end
注意
- sql自定义函数必须有返回值
- 在自定义函数中不允许修改基表内容(即,不能用insert,update,delete)
- 如果有多个参数,每个参数一之间用逗号隔开
- 调用函数时,函数名前要加dbo.
存储过程
存储过程时存储在服务器上的一组t-sql语句的集合,用来完成一个特定功能。
分为系统存储过程(系统自带)和自定义存储过程
自定义存储过程
-- 语法 create procedure(或proc) 存储过程名(up_) [参数列表] --这里的参数列表不能使用圆括号 begin 存储过程代码 end
注意:
- 存储过程可以没有返回值
- 存储过程不适用return语句带回返回值,如果有返回值,直接使用select语句返回
索引
- 索引:创建在表上
- 作用: 加快检索速度
- 全表扫面
- 索引分为聚集索引和非聚集索引
- 聚集索引: 在一个数据表中,只能创建一个聚集索引
- 主键会默认创建一个聚集索引
- 在你经常使用where的字段上添加非聚集索引
- 缺点:占用额外的存储空间,有可能降低insert、update、delete的速度
事务
事务时并发控制的单位,他是用户定义的一个操作,这些操作要么都做要么都不做,不可分割。
分为:sql server事务和ado.net事务
-- 语法 begin tran --开始一个事务操作 commit tran --提交 rollback --回滚
c#中使用时,通常把事务的操作封装到存储过程中
触发器
- 触发器是一种特殊的存储过程
- 只不过这个存储过程是不允许显示调用的
- 他只能在做了特定事件后,自动触发做出响应的
- 两张临时数据表:inserted、deleted
- 只能在触发器中访问
- 触发器是附着在一张表上的
-- 语法 create trigger 触发器名字 on 表名 after(或for) 之后触发 / instead of 之前触发 [insert/delete/update] as begin -- ······ end
触发器的触发条件:insert,delete,update
create trigger tr_bank_insert on bank after insert as begin print '往bank表中插入了记录' end create trigger tr_bank_delete on bank after delete as begin declare @id int declare @username nvarchar(8) declare @usermoney int select @id = id, @usermoney = usermoney, @username = username from deleted insert into bankbak values(@id, @username, @usermoney) end select * from bank select * from bankbak delete from bank where id = 3
sql server的触发器是表级触发器,表上一次性的多次操作只触发一次
上一篇: php 取post数据的三种方式
下一篇: [基础]C++:名字的作用域