您的位置:首页 > 数据库

SQL Server 存储过程和触发器sql语句练习

2015-12-18 22:25 288 查看
--1.查找18岁以上姓张的年龄最大的前20%
select top 20 percent * from stu
where 年龄>18 and 姓名 like '张_'
go

--2.创建存储过程,在stu表中性别那一列插入“男”或“女”时,在表中记录的是“1”或“0”
create procedure stu_insert  @num int,@name char(5),@sex char(6)
as
if @sex='男'
insert into stu values(@num,@name,1,null)
else
if @sex='女'
insert into stu values(@num,@name,0,null)
go

exec stu_insert 7,'赵四',男
go

--3.创建存储过程,输入学号,输出性别(显示的是“男”或“女”)
create proc stu_out @num int,@sex char(6) output
as
declare @se bit
set @se=(select 性别 from stu where 学号=@num)
if @se=1
set @sex='男'
else if @se=0
set @sex='女'
go

declare @sex char(6)
exec stu_out 2 ,@sex output
select @sex;
go

--新建一个表,在表中创建一个触发器,每次插入操作时,变量@str值会显示。
create table table1(a int)
go

create trigger table1_insert on table1 after insert
as
declare @str char(50)
set @str='trigger is working'
print @str
go

insert into table1 values(1)
select * from table1

--instead of触发器触发时只执行触发器内部的sql语句,而不执行激活该触发器的sql语句。
create table table2(a int)
go

create trigger table2_insert on table2 instead of insert
as
print 'instead of trigger is working'
go

insert into table2 values(1)
select * from table2

select * from cjb
select * from kcb
select * from xsb
go

--创建触发器,当向成绩表中插入一个学生的成绩时,将学生表中该学生的总学分加上添加的课程分数
create trigger cjb_insert on cjb after insert
as
declare @num char(6),@kc_num char(3),@xf int
select @num=学号,@kc_num=课程号 from inserted
select @xf=学分 from kcb where 课程号=@kc_num
update xsb set 总学分=总学分+@xf where 学号=@num
print '修改成功'
go

注意事项:

1、理解存储过程中的输入参数和输出参数。

2、定义参数的类型
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息