触发器和存储过程
2015-11-12 15:50
211 查看
触发器是一种特殊的存储过程。单从使用上来区别的话,触发器不用exec来触发,而是通过一些增删改等操作来触发。
存储过程:if (object_id('proc_getStudentRecord', 'P') is not null) --判断存储过程是否存在
drop proc proc_getStudentRecord
go
create proc proc_getStudentRecord(
@id int, --默认输入参数
@name varchar(20) out, --输出参数
@age varchar(20) output--输入输出参数
)
as
select @name = name, @age = age from student where id = @id and sex = @age;
go
-- declare 局部定义变量
declare @id int,
@name varchar(20),
@temp varchar(20);
set @id = 7;
set @temp = 1;
--运行存储过程
exec proc_getStudentRecord @id, @name out, @temp output;
select @name, @temp;
print @name + '#' + @temp;
触发器:
if (object_id('tgr_classes_inteadOf', 'TR') is not null) --判断触发器是否存在
drop trigger tgr_classes_inteadOf
go
create trigger tgr_classes_inteadOf
on classes
instead of delete/*, update, insert*/ --for表示之后触发,instead of表示之前触发
as
declare @id int, @name varchar(20);
--查询被删除的信息,并赋值
select @id = id, @name = name from deleted;
print 'id: ' + convert(varchar, @id) + ', name: ' + @name;
--先删除student的信息
delete student where cid = @id;
--再删除classes的信息
delete classes where id = @id;
print '删除[ id: ' + convert(varchar, @id) + ', name: ' + @name + ' ] 的信息成功!';
go
--test
select * from student order by id;
select * from classes;
delete classes where id = 7;
各列一个例子来理解存储过程和和触发器,如果项目中确实有更深的需求,当然还是去详细学一下比较好,当然大多数情况下是和游标等一些知识点结合使用的
存储过程:if (object_id('proc_getStudentRecord', 'P') is not null) --判断存储过程是否存在
drop proc proc_getStudentRecord
go
create proc proc_getStudentRecord(
@id int, --默认输入参数
@name varchar(20) out, --输出参数
@age varchar(20) output--输入输出参数
)
as
select @name = name, @age = age from student where id = @id and sex = @age;
go
-- declare 局部定义变量
declare @id int,
@name varchar(20),
@temp varchar(20);
set @id = 7;
set @temp = 1;
--运行存储过程
exec proc_getStudentRecord @id, @name out, @temp output;
select @name, @temp;
print @name + '#' + @temp;
触发器:
if (object_id('tgr_classes_inteadOf', 'TR') is not null) --判断触发器是否存在
drop trigger tgr_classes_inteadOf
go
create trigger tgr_classes_inteadOf
on classes
instead of delete/*, update, insert*/ --for表示之后触发,instead of表示之前触发
as
declare @id int, @name varchar(20);
--查询被删除的信息,并赋值
select @id = id, @name = name from deleted;
print 'id: ' + convert(varchar, @id) + ', name: ' + @name;
--先删除student的信息
delete student where cid = @id;
--再删除classes的信息
delete classes where id = @id;
print '删除[ id: ' + convert(varchar, @id) + ', name: ' + @name + ' ] 的信息成功!';
go
--test
select * from student order by id;
select * from classes;
delete classes where id = 7;
各列一个例子来理解存储过程和和触发器,如果项目中确实有更深的需求,当然还是去详细学一下比较好,当然大多数情况下是和游标等一些知识点结合使用的
相关文章推荐
- MySQL存储过程
- ASP程序与SQL存储过程结合使用详解
- Oracle存储过程之数据库中获取数据实例
- MSSQL自身存储过程的一个注入漏洞
- SQL SERVER调用存储过程小结
- SQLServer 2005 列所有存储过程的语句
- SQLServer 2008中的代码安全(一) 存储过程加密与安全上下文
- SQL Server存储过程的基础说明
- sqlserver存储过程语法详解
- MSSQL事务的存储过程
- SQL Server 存储过程解析
- sql server动态存储过程按日期保存数据示例
- 在登录触发器错误情况下连接SQL Server的方法
- SQLserver 数据库危险存储过程删除与恢复方法
- SQL Server存储过程中使用表值作为输入参数示例
- 你真的了解触发器么 数据实时同步更新问题剖析
- SQL Server 2000中的触发器使用
- Sql存储过程游标循环的用法及sql如何使用cursor写一个简单的循环
- SQLServer用存储过程实现插入更新数据示例
- sqlserver关于分页存储过程的优化【让数据库按我们的意思执行查询计划】