当前位置:首页 » 编程语言 » sql触发器执行存储过程
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql触发器执行存储过程

发布时间: 2023-05-15 07:45:28

sql存储过程执行之后会常占内存吗还有触发器的原理也可以给我说明一下。谢谢

在SQL中,触发器是一种特殊类型的存储过程,它不同于SQL的存储过程。触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名字而被直接调用。当对某一表进行诸如UPDATE、 INSERT、 DELETE 这些操作时,SQL Server 就会自动执行触发器所定义的SQL 语句,从而确保对数据的处理必须符合由这些SQL 语句所定义的规则。 触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂的参照完整性和数据高纳的一致性。除此之外,触发器还有其它许多不同的功能: (1)强化约束(Enforce restriction) 触发器能够实现比CHECK 语句更为复杂的约束。 (2)跟踪变化(Auditing changes) 触发器可以侦测数据库内的操作,从而不允许数据库中未经许可的指定更新和变化。 (3)级联运行(Cascaded operation)。 触发器可以侦测数据库内的操作,并自动地级联影响整个数据库的各项内容。例如,某个表上的触发器中包含有对另外一个表的数据操作(如删除,更新,插入)而该操作又导致该表上触发器被触发。 (4)存储过程的调用(Stored procere invocation)。 为了响应数据库更新触,发器可以调用一个或多个存储过程,甚至可以通过外部过程的调用而在DBMS( 数据库管理系统)本身之外进行操作。由此可见,触发器可以解决高级形式的业务规则或复杂行为限制以及实现定制记录等一些方面的问题。例如,触发器能够找出某一表在数据修改前后状态发生的差异,并根据这种差异执行一定的处理。此外一个表的同一类型(INSERT、 UPDATE、 DELETE)的多个触发器大旅能够对同一种数据操作采取多种不同的处理。 总体而言,触发器性能通常比较低。当运行触发器时,系统处理的大部分时间花费在参照其它表的这一处理上,因为这些表既不在内存中也不在数据库设备上,而删除表和插入表总是位于内存中戚仿没。可见触发器所参照的其它表的位置决定了操作要花费的时间长短。 触发器的种类 SQL Server 2000 支持两种类型的触发器:AFTER 触发器和INSTEAD OF 触发器。其中AFTER 触发器即为SQL Server 2000 版本以前所介绍的触发器。该类型触发器要求只有执行某一操作(INSERT UPDATE DELETE) 之后,触发器才被触发,且只能在表上定义。可以为针对表的同一操作定义多个触发器。对于AFTER 触发器,可以定义哪一个触发器被最先触发,哪一个被最后触发,通常使用系统过程sp_settriggerorder 来完成此任务。 INSTEAD OF 触发器表示并不执行其所定义的操作(INSERT、 UPDATE、 DELETE),而仅是执行触发器本身。既可在表上定义INSTEAD OF 触发器,也可以在视图上定义INSTEAD OF 触发器,但对同一操作只能定义一个INSTEAD OF触发器。

Ⅱ SQL里中存储过程和触发器,如何创建

  1. 触发器是一种特殊的存储过程,
    2.触发器是在对表进行插入、更新或删除操作时自动执行的存储过程
    3.触发器通常用于强制业务规则
    4.触发器是一种高级约束,可以定义比用CHECK 约束更为复杂的约束
    5.可执行复杂的SQL语句(if/while/case)

  2. DELETE 触发器
    INSERT 触发器
    UPDATE 触发器

  3. /*----------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')

  4. go
    --就是插一条数据进入students中,Tri_insert触发器就会自动在student_Score插入相关的学生的一条分数的数据
    insert into students(s_name,s_classId) values('黄驰',6)

  5. select * from student_Score

Ⅲ asp sql2000 事务 触发器 存储过程

你说的那些是T-SQL语言,是操作数据库的,是在数据库里启虚正的查询分析器里写的。
常见T-SQL语句有:
1)变量定义语句:declare
2)数据定义誉镇语句:create、alter、drop
3)数据操纵语句:select、insert、update、delete
4)数据控悄悔制语句:grant、deny、revoke
5)流程控制语句:if、case、while
比如:创建存储过程
create
procere
storedproc
as
select
*
from
orders
执行:exec
storedproc
比如:触发器
create
trigger
newtrigger
on
orders
for
delete
as
print
'订单号码已被更改,触发器起到作用!'

Ⅳ 如何在oracle 触发器中执行mssql数据库中的存储过程的相关推荐

1:什么叫存储过程?
在oracle中,可以在数据库中定义子程序,这种程序块叫存储过程(procere),它存放在数据字典中,可以在不同用户和应用程序中共享,并可以实现程序的优化和重用。

2:存储过程的有点?
 过程运行在服务器端,执行速度快
 过程执行一次后代码就驻留在高速缓存中,在以后的操作中,直接调用缓存数据。
 确保数据库的安全性,可以不授权用户直接访问应用程序中的一些表,而是授权用户执咐举行访问数据库的过程。
 自动完成需要预先执行的任务,过程可以在系统启动时自动运行。、

3:存储过程的创建和执行
用户存储过程只能定义在当前数据库中,可以使用sql语句或OEM创建。
默认情况下,用户创建的存储过程归登录数据库的用户所拥有,DBA可以把许可授权给其他用户。
Sql命令创建存储过程
CREATE procere 过程名
【(parameter parameter_mode date_type,….n)】
IS| AS
BEGIN
SQL_STATEMENT
END 过程名
其中
Parameter表示过程的参数。
parameter_mode:参数的类型,过程参数和函数参数一样,有三种类型IN,OUT,IN OUT
IN 表示参数是输入给过程的。
OUT表示采纳数载过程中被赋值,可以传给过程的外部。
IN OUT表示可以传内,可以传外。

调用存储过程
直接输入存储过程的名字可以执行一个已经定义的存储过程。

存储过程的编辑修改
修改虚简衫存储过程虽然可以和修改视图一样,用ALTER procere,但是他是用来重新编译和验证用的,如果要修改过程定义,建议还是用create or replace。

存储过程的删除
当某个过程不再需要的时候,应该将其从内存中删除,以释放它占用的资源。
Drop procere 存储过程名。
Drop procere update_info.

触发器
触发器(trigger)是一些过程,与表联系紧密,用于保护表中的数据,当一个基表被修改时,触发器自动就会执行。例如出入其可以实现多个表间数据的一致性和完整性。
一般情况下,对表数据的操作有增删查改,维护数据的触发器也可以分为多种,每张基表最多可以建立12个触发器。
1:Before insert 2:before insert fo each row; 3:after inert
4:after insert for each row 5:before update 6:before update for each row
7:after update 8:after update for each row; 9:before delete;
10:before delete for each row 11:after delete 12:after delete for each row.

利用sql语句创建触发器
语法规则
Create or replace trigger 触发器名
{before| after| instead of}
{delete 【or insert】【or update】【of column ….n 】}
On 表名|视图名
【for each row 】[]where condition]]
Sql_statement[,,,n]

参数说明
Instead of :指定在创差腔建替代触发器。
Of column 指定在哪些列上进行触发。。。
创建触发器的限制
1:触发器中有效的语句可以包括DML语句,但是不能包括DDL,rollback,commit
,savepoint都不适用。

Ⅳ sql server中触发器和存储过程的概念和作用,能不能写的明白一点,易懂一点

1,触发器。其实也是一些sql语句。可以设定什么时正卖候触发这些sql语句执行。比如,当数据库里有插入insert,update等动作的时候,让触发器的纤蚂sql语句执行,这些sql语句可以插入,修改某个表。

2,存储过程。也是一些sql语句集合,包含表达式,控制流程,举竖逗比较接近程序语言了,比如,有if判断语句,可以声明变量,可以初始化变量,可以接受参数。

Ⅵ SQL Server 2000 触发器 存储过程 急需!!!!!!

--这是存储过程的创建
-- Create a procere that takes one input parameter
-- and returns one output parameter and a return code.
CREATE PROCEDURE SampleProcere @EmployeeIDParm INT,
@MaxTotal INT OUTPUT
AS
-- Declare and initialize a variable to hold @@ERROR.
DECLARE @ErrorSave INT
SET @ErrorSave = 0

-- Do a SELECT using the input parameter.
SELECT FirstName, LastName, JobTitle
FROM HumanResources.vEmployee
WHERE EmployeeID = @EmployeeIDParm

-- Save any nonzero @@ERROR value.
IF (@@ERROR <> 0)
SET @ErrorSave = @@ERROR

-- Set a value in the output parameter.
SELECT @MaxTotal = MAX(TotalDue)
FROM Sales.SalesOrderHeader;

IF (@@ERROR <> 0)
SET @ErrorSave = @@ERROR

-- Returns 0 if neither SELECT statement had
-- an error; otherwise, returns the last error.
RETURN @ErrorSave
GO

--下面是执行过程

-- Declare the variables for the return code and output parameter.
DECLARE @ReturnCode INT
DECLARE @MaxTotalVariable INT

-- Execute the stored procere and specify which variables
-- are to receive the output parameter and return code values.
EXEC @ReturnCode = SampleProcere @EmployeeIDParm = 19,
@MaxTotal = @MaxTotalVariable OUTPUT

-- Show the values returned.
PRINT ' '
PRINT 'Return code = ' + CAST(@ReturnCode AS CHAR(10))
PRINT 'Maximum Quantity = ' + CAST(@MaxTotalVariable AS CHAR(10))
GO

--触发器
--使用包含提醒消息的颂敬 DML 触唤樱仔发器
--如果有人试图在 Customer 表中添加或更改数据,下列 DML 触发器将和汪向客户---端显示一条消息。

USE AdventureWorks;
GO
IF OBJECT_ID ('Sales.reminder1', 'TR') IS NOT NULL
DROP TRIGGER Sales.reminder1;
GO
CREATE TRIGGER reminder1
ON Sales.Customer
AFTER INSERT, UPDATE
AS RAISERROR ('Notify Customer Relations', 16, 10);
GO

Ⅶ SQL怎么在存储过程或触发器中使用循环语句

这个触发器是更新的时候操作;
表记录的update实际上执行的是先delete后insert;
所以,如果要将触发器里面的sql代码提取出来可以单独执行的话,需要知道参数,可以把参数写成存储过程的参数,同时还需要留意触发器中的特定执行条件,比如说当update某个字段时才执行触发器,这个条件也要考虑到存储过程的sql逻辑中。
以上几点建议仅供参考。

Ⅷ sql中的触发器与存储过程有什么相同点和不同点希望能专业点,谢谢

一、功能不同:

1、存储过程的功能:

(1) 变量说明

(2) ANSI(美国国家标准化组织)兼容的SQL命令(如Select,Update….)

(3) 一般流程控制命令(if…else…、while….)

2、触发器的功能:

(1)强化约束(Enforce

restriction)

(2)跟踪变化Auditing

changes

(3)级联运行(Cascaded

operation)

二、指代不同

存储过程:在大型数据库系统中,一组为了完成特定功能的SQL语句集。

触发器:SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法。

三、作用不同:

1、存储过程:局时存储过程,以两皮隐个井字号(##)号开始,则该存储过程将成为一个存储在tempdb数据库中的全局临时存储过程,全局临时存储过程一旦创建,以后连接到服务器的任意用户都可以执行它,而且不需要特定的权限。

2、触发器:可用于强制引用完整性,以便在多个表中添加、更新或删除行时,保留在这些表之间所定义的关系。然而,强制引用完整性的最好方法是在相关表中定义主键和外键约束。

四、相同点:

触发器是自动的:它们在对表的数据作了任何清握罩修改(比如手工输入或者应用程序采取的操作)之后立即被激活。

触发器可以通过数据库中的相关表进行层叠更改。例如,可以在 titles 表的 title_id 列上写入一个删除触发器,以使其它表中的各匹配行采取删除操作。该触发器用 title_id 列作为唯一键,在 titleauthor、sales 及 roysched 表中对各匹配行进行定位。

触发器可以强制限制,这些限制比用 CHECK 约束所定义的更复杂。与 CHECK 约束不同的是,触发器可以引用其它表中的列。

(8)sql触发器执行存储过程扩展阅读:

触发器可通过数据库中的相关表实现级联更改;通过级联引用完整性约束可以更有效地执行这些更改。触答闹发器可以强制用比 CHECK 约束定义的约束更为复杂的约束。与CHECK约束不同,触发器可以引用其它表中的列。例如,触发器可以使用另一个表中的 SELECT 比较插入或更新的数据,以及执行其它操作,如修改数据或显示用户定义错误信息。

触发器也可以评估数据修改前后的表状态,并根据其差异采取对策。

Ⅸ 如何在 SQLAlchemy 中定义触发器,存储过程

使用 动态 SQL, 好像是可以处理。

1> CREATE procere fpinput_proc
2>搜余 AS
3> BEGIN
4>
5> DECLARE @sql VARCHAR(MAX);
6> SET @sql =
7> 'CREATE TRIGGER AfterDeleteVIP '
8> + ' ON VIP '
9> + ' FOR DELETE '
10> + 'AS '
11> + 'BEGIN '
12> + ' DELETE FROM VB '
13> + ' WHERE '
14> + ' V_No IN (SELECT V_NO FROM deleted); '
15> + 'END; '
16>
17> EXECUTE (@sql);
18> END;
19> go

1> begin
2> exec fpinput_proc;
3> end
4> go

1> select
2> tri.name AS TriggerName
3> from
4> sys.triggers tri
5> go
TriggerName
------------------------------------------------------
AfterDeleteVIP

也就握唤是把那一段 创建触发器段漏凯的语句, 放到一个 @Sql 的变量中。
然后 EXECUTE (@sql);

那么在存储过程执行完毕后,触发器就创建了。

Ⅹ sql 中触发器怎么调用存储过程sp_addlogin

如果sp_addlogin没有变量的话
直接写 exec sp_addlogin 就可以调用了
假设有变陆枯量 exec sp_addlogin ‘变量1'模悉渣 ,‘变旦悄量2’