SQL SERVER
存储过程
1 create proc 存储过程名称 2 as 3 begin 4 set nocount on; 5 --sql语句 6 end 7 go
变量
--1、变量名以@开头 select,set declare @num int set @num=1 print @num declare @num1 int =1 print @num1 declare @id int select @id from result where name=''
事务
begin transaction --开启一个事务 declare @error int=0 --定义变量 赋值 --卖家,卖加的账户要加钱 update AccountCompany set UserAccount = UserAccount+9000 where id=2 set @error=@error+@@ERROR --ERROR全局变量,获取错误的编号 --买家,账户扣钱 update AccountCompany set UserAccount = UserAccount-9000 where id=1 set @error=@error+@@ERROR if @error<>0 begin RollBack TRANSACTION --事务进行回滚 end else begin COMMIT TRANSACTION --提交 end select * from AccountCompany
触发器
优点:
1、触发器是自动的,当对表中的数据做了任何修改之后立即被激活
2、触发器可以通过数据库中相关表进行层叠修改
3、触发器可以强制限制,这些限制比用CHECK约束所定义的更复杂,与CHECK约束不同的是,触发器可以引用其他表中的列
触发器的作用
触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂参照完整性和数据的一致性,它能够对数据库中的相关表进行级联修改,提高比CHECK约束更复杂的的数据完整性,并自定义错误消息。触发器的主要作用主要有以下接个方面:
-
强制数据库间的引用完整性
-
级联修改数据库中所有相关的表,自动触发其它与之相关的操作
-
跟踪变化,撤销或回滚违法操作,防止非法修改数据
-
返回自定义的错误消息,约束无法返回信息,而触发器可以
-
触发器可以调用更多的存储过程
触发器: 在对数据库数据进行操作(增加(insert)、修改(update)、删除(delete))后,可以自动执行的操作
触发器分为两类:instead of 触发器 ,after(for)触发器。
after(for)触发器:在数据更新到数据后再执行的操作
数据临时载体:inserted和deleted
inserted:存储操作中新增的或者更新的数据
deleted:存储操作中删除的数据
--Insert操作Instead of 触发器 在数据更新到数据库之前执行的操作 create trigger 触发器名称 on 表名 instead of insert --操作(增删改) as begin --需要执行的业务 end --Insert操作After 触发器 在数据更新到数据后在执行的操作 create trigger 触发器名称 on 表明 After Insert as begin --需要执行的业务 end --GO的意思是分批处理语句
自定义函数
用户自定义函数的类型:
1、标量值函数(返回一个标量值)
2、表格值函数(内联表格值函数、多语句表值函数,返回一个结果集即返回多个值)
特点:内联表格值函数支持在WHERE子句中使用参数
--标量值函数 go create function funName (@strName nvarchar(50)) returns bit as begin declare @len bit if(len(@strName)>1) begin set @len=0 end else begin set @len=1 end return @len end go select dbo.funName('张')
--内联表格值函数 go create function fun1 (@id int) returns table --返回一个表 as return select * from Lemon..Man where Id=@id; go select * from fun1(2)
--多语句表值函数 go create function fun2 () returns @tableName table(strname nvarchar) as begin insert @tableName select strname from @tableName return end