存储过程,你调用的时候才会执行
触发器就是你设定了数据库里比如删除,修改,插入时,才会触发
触发器不同于存储过程,触发器主要是通过事件执行触发而被执行的,而存储过程可以通过存储过程名称名字而直接调用。当对某一表进行诸如UPDATE、INSERT、DELETE这些操作时,SQLSERVER就会自动执行触发器所定义的SQL语句,从而确保对数据的处理必须符合这些SQL语句所定义的规则。
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。
触发器是一种特殊类型的存储过程,它不同于我们前面介绍过的存储过程。触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名字而被直接调用。当对某一表进行诸如Update、 Insert、 Delete 这些操作时,SQL Server 就会自动执行触发器所定义的SQL 语句,从而确保对数据的处理必须符合由这些SQL 语句所定义的规则。
存储过程分类:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
CREATE
proc search_dwmc
@dwidoldint,
@dwmcresult
varchar
(100)
output
as
declare
@stopint
declare
@result
varchar
(80)
declare
@dwmc
varchar
(80)
declare
@dwidint
set
nocounton
set
@stop=1
set
@dwmc=
""
select
@dwmc = dwmc, @dwid =
convert
(
int
,fjdid)
from
jtdw
where
id = @dwidold
set
@result = rtrim(@dwmc)
if @dwid = 0
set
@stop = 0
while(@stop = 1)
and
(@dwid<>0)
begin
set
@dwidold = @dwid
select
@dwmc = dwmc, @dwid =
convert
(
int
,fjdid)
from
jtdw
where
id = @dwidold
if @@rowcount = 0
set
@dwmc =
""
else
set
@result= @dwmc + @result
if(@dwid = 0)
or
(@@rowcount = 0)
set
@stop = 0
else
continue
end
set
@dwmcresult = rtrim(@result)
使用execpro-
name
[pram1pram2.....]
|
insert
1
2
3
4
5
6
7
8
9
10
11
12
13
|
create
trigger
tri_insert
on
student
for
insert
as
declare
@student_idchar(10)
select
@student_id=s.student_id
from
students
inner
join
insertedion s.student_id=i.student_id
if @student_id=
'0000000001'
begin
raiserror(
'不能插入1的学号!'
,16,8)
rollbacktran
end
go
|
update
1
2
3
4
5
6
7
8
9
10
|
create
trigger
tri_update
on
student
for
update
as
if
update
(student_id)
begin
raiserror(
'学号不能修改!'
,16,8)
rollbacktran
end
go
|
delete
1
2
3
4
5
6
7
8
9
10
11
|
create
trigger
tri_delete
on
student
for
delete
as
declare
@student_idvarchar(10)
select
@student_id=student_id
from
deleted
if @student_id=
'admin'
begin
raiserror(
'错误'
,16,8)
rollbacktran
end
|
https://baike.baidu.com/item/%E5%AD%98%E5%82%A8%E8%BF%87%E7%A8%8B/1240317?fr=aladdin
https://zhidao.baidu.com/question/2203404281320501668.html
https://zhidao.baidu.com/question/79534999.html?qbl=relate_question_0&word=%B4%A5%B7%A2%C6%F7%20%BA%CD%B4%E6%B4%A2%B9%FD%B3%CC%B5%C4%C7%F8%B1%F0
https://baike.baidu.com/item/%E8%A7%A6%E5%8F%91%E5%99%A8/16782?fr=aladdin