1. 什么事触发器和存储过程
存储过程 一组为了完成特定功能的sql 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
触发器 是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。
2. 数据库存储过程、函数、触发器的区别
存储过程和函数的区别:
1. 一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。
2. 对于存储过程来说可以返回参数,而函数只能返回值或者表对象。
3. 存储过程一般是作为一个独立的部分来执行,而函数可以作为查询语句的一个部分来调用,由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。
4. 当存储过程和函数被执行的时候,SQL Manager会到procere cache中去取相应的查询语句,如果在procere cache里没有相应的查询语句,SQL Manager就会对存储过程和函数进行编译。
Procere cache中保存的是执行计划 (execution plan) ,当编译好之后就执行procere cache中的execution plan,之后SQL SERVER会根据每个execution plan的实际情况来考虑是否要在cache中保存这个plan,评判的标准一个是这个execution plan可能被使用的频率;其次是生成这个plan的代价,也就是编译的耗时。保存在cache中的plan在下次执行时就不用再编译了。
触发器、存储过程和函数三者有何区别:
触发器是特殊的存储过程,存储过程需要程序调用,而触发器会自动执行;
在什么时候用触发器?要求系统根据某些操作自动完成相关任务。
什么时候用存储过程?
存储过程就是程序,它是经过语法检查和编译的SQL语句,所以运行特别快。
存储过程和用户自定义函数具体的区别
先看定义: 存储过程存储过程可以使得对数据库的管理、以及显示关于数据库及其用户信息的工作容易得多。存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。
存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其它强大的编程功能。存储过程可包含程序流、逻辑以及对数据库的查询。它们可以接受参数、输出参数、返回单个或多个结果集以及返回值。 可以出于任何使用 SQL 语句的目的来使用存储过程,它具有以下优点: 可以在单个存储过程中。
3. 如何用触发器调用存储过程!!
create trigger [owner.]trigger_name
on[owner.]table_name
{for insert}
as
sql_statement
顺便问下:你的rollback怎么写在begin里了
4. 数据库存储过程、函数、触发器的区别是什么
三者差别:
1、存储过程实现的功能要复杂一点,而函数实现的功能针对性比较强。;
2、存储过程一般是作为一个独立的部分来执行,而函数可以作为查询语句的一个部分来调用;
3、触发器是特殊的存储过程,存储过程需要程序调用,而触发器会自动执行。
分别含义:
1、存储过程的特点
①存储过程只在创建时进行编译,以后执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
② 当对数据库进行复杂操作时(如对多个表进行Update、Insert、Query、Delete时),可将此复杂操作用存储过程封装起来。
③可以在过程中调用另一个存储过程。可以在存储过程中调用函数。这可以简化一系列复杂语句。
④ 安全性高,可设定只有某用户才具有对指定存储过程的使用权。
⑤参数有三种(IN、OUT、IN OUT),可返回多个参数值。
⑥在ORACLE中,若干个有联系的过程可以组合在一起构成程序包。
⑦存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。
2、函数的特点
①函数只有一种参数(IN),只有一条RETURN语句,只能返回单一的值。
②可在SQL语句(DML或SELECT)中调用函数。由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。
3、触发器的特点
触发器是特殊的存储过程,存储过程需要程序调用,而触发器会自动执行。
5. 存储过程和触发器
PROCEDURE
p_book1
PROCEDURE p_book2
书名='大学英语'
EXEC p_book2
图书编号=@x
'001105'
varchar(20)
书籍表 where 书名=@c1
EXEC p_book4 '大学语文'
6. 存储过程与触发器的区别
触发器与存储过程非常相似,触发器也是SQL语句集,两者唯一的区别是触发器不能用EXECUTE语句调用,而是在用户执行Transact-SQL语句时自动触发(激活)执行。触发器是在一个修改了指定表中的数据时执行的存储过程。通常通过创建触发器来强制实现不同表中的逻辑相关数据的引用完整性和一致性。由于用户不能绕过触发器,所以可以用它来强制实施复杂的业务规则,以确保数据的完整性。触发器不同于存储过程,触发器主要是通过事件执行触发而被执行的,而存储过程可以通过存储过程名称名字而直接调用。当对某一表进行诸如UPDATE、INSERT、DELETE这些操作时,SQLSERVER就会自动执行触发器所定义的SQL语句,从而确保对数据的处理必须符合这些SQL语句所定义的规则。
7. 如何在触发器中调用存储过程
在触发器中调用存储过程:
CREATEtriggermalice
onBBSUser
forupdate
as
ifupdate(receive)--当receive字段发生update事件时触发
begin
updatebbsuser
setreceive_temp=bu.receive_temp+(i.receive-d.receive)
frombbsuserbu,deletedd,insertedi
wherebu.userid=i.userid
declare@tempfloat,@scopefloat
set@temp=(selectbb.receive_tempfrombbsuserbb,deleteddwherebb.userid=d.userid)
set@scope=(selectbb.receive_scopefromBBSUserbb,deleteddwherebb.userid=d.userid)
if@temp<=@scope
updateuserinfo
setstandnumber=bu.standnumber+(i.receive-d.receive)
fromuserinfobu,deletedd,insertedi
wherebu.userid=d.userid
declare@userint,@comfloat
select@user=d.userid,@com=us.standnumber
fromUserInfous,Deletedd,Insertedi
whereus.userid=d.userid
exectimely@user,@com
if@temp>@scope
begin
updateuserinfo
setstandnumber=bu.standnumber+(@scope-d.receive)
fromuserinfobu,deletedd,insertedi
wherebu.userid=d.userid
updatebbsuser
setreceive_temp=@scope
frombbsuserbu,deletedd
wherebu.userid=d.userid
select@user=d.userid,@com=us.standnumber
fromUserInfous,Deletedd,Insertedi
whereus.userid=d.userid
exectimely@user,@com
end
end
8. SQL中存储过程与触发器的区别
存储过程相当于一个函数,需要自己调用,触发器是自动执行不需要调用
9. SQL里中存储过程和触发器,如何创建
触发器是一种特殊的存储过程,
2.触发器是在对表进行插入、更新或删除操作时自动执行的存储过程
3.触发器通常用于强制业务规则
4.触发器是一种高级约束,可以定义比用CHECK 约束更为复杂的约束
5.可执行复杂的SQL语句(if/while/case)DELETE 触发器
INSERT 触发器
UPDATE 触发器/*----------Insert 插入 触发器------------*/
Create Trigger Tri_insert
on students /*针对某个表,触发器是建立在表关系上的*/
for insert /*采用的是哪种触发器*/
as
declare @stu_id int;
declare @stu_score varchar(200);
select @stu_id=s_id from inserted /*这里的Inserted 是在创建触发器时候 系统自动创建的内存表*/
insert into student_Score(s_id,ss_score)values(@stu_id,'100')go
--就是插一条数据进入students中,Tri_insert触发器就会自动在student_Score插入相关的学生的一条分数的数据
insert into students(s_name,s_classId) values('黄驰',6)select * from student_Score
10. 如何在存储过程中建立触发器
看样子你用的事MSSQL,据我所知,ORACLE在存储过程中不能 使用:create trigger/create view/create procere/create rule /create default之类的关键词。。。也就是不能建立,所以MSSQL也可能不能建立!