面试前复习SQL数据库1

1.触发器的作用?

触发器是一个特殊的存储过程,当对指定的表进行某种特定操作(如:Insert,Delete或Update)时,触发器产生作用。触发器可以调用存储过程。
触发器的限制:
一个表最多只能有三个触发器,insert,update,delete
每个触发器只能用于一个表
不能对视图、临时表创建触发器
Truncate table能删除表,但不能触发触发器
不能将触发器用于系统表
常见的触发器有三种:分别应用于Insert,Update,Delete事件。
instead of 触发器

创建一个instead of 触发器

if exists(select * from sysobjects where name='trig_inser') --触发器名称
 drop trigger trig_inser
 go
 create trigger trig_inser on Employee instead of insert
 as
 declare @Name nvarchar(50), @Gender nvarchar(50)
 declare @Salary decimal(10,2)
 select @Name=Name,@Gender=Gender,@Salary=Salary from inserted
 if @Gender='男' and @Salary<=2300.00 --判断条件
 begin
	print'性别男的,工资需要大于2300'
end
else
begin
	print'进行添加'
	insert Employee(Name,Gender,Salary) values(@Name,@Gender,@Salary)
end
go

创建成功后可以在表的触发器文件夹下找到你创建的触发器。
在这里插入图片描述

sql语句执行后触发 触发器 进行判断成立后进行添加操作,不成立提示错误信息

 sql语句执insert Employee(Name,Gender,Salary) values('lily12222111','男',2000.00)

在这里插入图片描述
如果条件成立则提示进行添加 ,创建成功

insert Employee(Name,Gender,Salary) values('王','男',2300.00)

在这里插入图片描述
在这里插入图片描述
after触发器

if exists(select * from sysobjects where name='trig_inser2')
 drop trigger trig_inser2
 go
 create trigger trig_inser2 on Employee after insert --和instead of 触发器区别
 as
 declare @Name nvarchar(50), @Gender nvarchar(50)
 declare @Salary decimal(10,2)
 select @Name=Name,@Gender=Gender,@Salary=Salary from inserted
 if @Gender='男' and @Salary<=2300.00
 begin
	print'性别男的,工资需要大于2300'
	rollback transaction --回滚
end
else
begin
	print'进行添加'
	
end
go

after触发器和instead of 触发器 的区别在于执行的先后顺序,after触发器执行sql语句是先执行语句,后进行判断,条件不成立时回滚语句,成立时进行保存数据

insert Employee(Name,Gender,Salary) values('lily12222111','男',2000.00)

在这里插入图片描述

什么是存储过程?用什么来调用?

无参数存储过程
创建一个无参数的存储过程

if exists(select * from sysobjects where name='proc_ArticleComment')
 drop procedure proc_ArticleComment --存储过程名称
 go
 --判断是否存在如果存在删除它
 create procedure proc_ArticleComment
 as
 select CommentID ,ar.ArticleID ,l.LikeID ,l.CreateDate,ContentDesc ,ar.CreateDate,c.CustomerName,c.LoginName,c.LoginPassword,c.Sex,c.CreateDate
 from  ArticleComment ar,ArticleLike l,Customer c
 where ar.ArticleID=l.ArticleID and ar.CommentID=c.CustomerID

调用存储过程

 exec proc_ArticleComment

方法简单,成功后省略了连表查询的繁琐,简单创建多次调用。

有参数的存储过程
创建一个有参数的存储过程

 if exists(select * from sysobjects where name='proc_ArticleComment2')
 drop procedure proc_ArticleComment2 --存储过程名称
 go
  --判断是否存在如果存在删除它
 create procedure proc_ArticleComment2(
 @LoginName nvarchar(50)

 )
 as
 select CommentID ,ar.ArticleID ,l.LikeID ,l.CreateDate,ContentDesc ,ar.CreateDate,c.CustomerName,c.LoginName,c.LoginPassword,c.Sex,c.CreateDate
 from  ArticleComment ar,ArticleLike l,Customer c
 where ar.ArticleID=l.ArticleID and ar.CommentID=c.CustomerID and c.LoginName=@LoginName
 go

调用存储过程,调用时需要对你说明的变量进行传参,多个参数用逗号隔开。

  exec proc_ArticleComment2  ' KenshinCui'
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值