2017-3-16 Tsql基础编程 存储过程 触发器 级联删除
1.定义变量:
declare @变量名 数据类型
变量赋值:
set @变量名 = 值; select @变量名 = 值;(常用)
取值打印:
select @变量名 print @变量名
要执行变量赋值取值的时候代码要一起执行,不能分句执行:
declare @aa int ;
select @aa = 11;
select @aa;
打印结果:
2.分支语句:
if @a>@b
begin
语句
end
else
begin
语句
end
declare @a int;
declare @b int;
select @a=1;
select @b=2;
if @a>@b
begin
select 'a比b大';
end
else
begin
select 'b比a大';
end
输出结果:b比a大
3.循环语句:
declare @a int ;
select @a=1;
while(@a<10)
begin
select @a
end
declare @aa int;--定义变量
select @aa=1;--赋值
while @aa<10
begin
select @aa;--打印
select @aa=@aa+1;--给变量重新赋值
end
4.存储过程:
相当于函数,四要素,输入,输出,函数体,函数名
create proc jiafa --无返回值
@bb int, --第一个参数
@cc int --第二个参数
as
return @bb+@cc;
declare @bbb int; --定义一个变量接受和
exec @bbb = jiafa 10,20; --2个数相加
select @bbb; --打印结果
5.触发器
一个特殊的存储过程,没办法调用它,而是通过增删改的动作来实现
一个表的一个动作只能有一个触发器
格式:
create trigger 哪个表的那个动作
on 表名 ---- 针对于哪一个表写的触发器
for 动作 ---- 针对于哪一个动作触发之后的触发器
或者 instead of ---- 针对于哪一个动作执行替换
as
触发器内容
例子:
--1. 给score表创建触发器,删除内容之后自动查询表中剩余的内容
create trigger Score_delete
on score
for delete
as
select * from score
delete from score where sno='103'
--2 给score表创建触发器,将要删除的内容替换成查询
create trigger score_delete
on score
instead of delete ----instead of 将要删除的内容替换成as后面的语句
as
select * from score
delete from score where sno='105'
--3 给score表建立触发器,将要删除的内容拦截,并将删除的内容展示出来
create trigger score_delete
on score
instead of delete
as
select * from deleted ---deleted拦截触发器的内容,将要删除课程号为105的内容给展示出来
delete from score where sno='105'
--4 拦截删除的数据,并且进行提醒,不能删除
create trigger score_delete
on score
instead of delete
as
declare @aa nvarchar(50); --声明变量
select @aa = sno from deleted; --给变量赋值,将删除的sno赋值给变量
if @aa='105'
begin
select '不能删除此数据' --如果是105提示此数据不能删除
end
else
begin
delete from score where sno=@aa; --如果不是限制数据可以删除
end
delete from score where sno='105'
6.级联删除
//创建2个表 用户表 班级表
create table Users
(
ids nvarchar(50) primary key,
Name nvarchar(50) ,
Class nvarchar(50)
)
create table Class
(
ClassCode nvarchar(50) primary key,
ClassName nvarchar(50)
)
insert into Class values('c001','一班')
insert into Class values('c002','二班')
insert into Class values('c003','三班')
insert into Class values('c004','四班')
insert into Users values('1','键盘','c001')
insert into Users values('2','鼠标','c002')
insert into Users values('3','李三','c003')
insert into Users values('4','赵四','c004')
//创建触发器---级联删除
create trigger Class_delete
on class
instead of delete
as
declare @aa nvarchar(50);
select @aa = classcode from class;
delete from users where class=@aa;
delete from class where classcode=@aa;
//这样用触发器就可以删除班级表中classcode中的004
delete from Class where ClassCode='c004'
select * from Class