avatar
前端开发 / 动画 / 日语初心者

T-SQL学习笔记

2019/9/9
5 mins

学习 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

注意

存储过程

存储过程时存储在服务器上的一组 T-SQL 语句的集合,用来完成一个特定功能。 分为系统存储过程(系统自带)和自定义存储过程

自定义存储过程

-- 语法
create procedure(或proc) 存储过程名(up_)
[参数列表] --这里的参数列表不能使用圆括号
begin
	存储过程代码
end

注意:

索引

事务

事务时并发控制的单位,他是用户定义的一个操作,这些操作要么都做要么都不做,不可分割。 分为:SQL Server 事务和 ADO.NET 事务

-- 语法
begin tran  --开始一个事务操作
commit tran --提交
rollback    --回滚

C#中使用时,通常把事务的操作封装到存储过程中

触发器

-- 语法
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 的触发器是表级触发器,表上一次性的多次操作只触发一次

下一篇
JavaScript闭包