当前位置:首页 » 存储配置 » sql触发器调用存储过程

sql触发器调用存储过程

发布时间: 2022-09-07 09:38:15

‘壹’ 关于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如何可以自动调用存储过程

在触发器里面做呗
例如有一张表是用来计次的,计一次数,update一下对应字段(如增加或减少)
你就在你的表上建立一个update的触发器
调用这个存储过程
不过得保证这个存储过程执行速度和执行有效性
否则由于触发器没有执行完,这个表是锁定的,既不能读也不能写
---------------------
你写一个update触发器在一个表上,每当这个表被update时候,就会运行这个触发器脚本

‘叁’ SQl中触发器怎样执行的

创建触发器 是特殊的存储过程,自动执行,一般不要有返回值。

1、后触发器 (AFTER,FOR)先执行对应语句,后执行触发器中的语句。

2、前触发器 并没有真正的执行触发语句(insert,update,delete),而是执行触发后的语句。

3、行级触发器 (FOR EACH ROW) 在SQL server 中不存在。

(3)sql触发器调用存储过程扩展阅读:

创建触发的语法

CREATE TRIGGER trigger_name --触发器名称

ON table_name --触发的表

[WITH ENCRYPTION]

FOR [DELETE, INSERT, UPDATE] --选择触发器类型

AS --触发后要做的语句

T-SQL语句

GO --结束标记

‘肆’ 怎样使用PLSQL Developer调试 存储过程和触发器

1. 打开PL/SQL Developer如果 在机器上安装了PL/SQL Developer的话,打开PL/SQL Developer界面输入 用户名,密码和host名字,这个跟在程序中web.config中配置的完全相同,点击确定 找到 需要调试的存储过程所在的包(Package bodies),如PACK_ACTIVITY,点击右键,在弹出菜单中选择[查看],得到包中的所有存储过程和他们的代码. 2. 添加debug信息为了 能够单步跟踪存储过程,需要为其所在的包添加debug信息,右键点击需要调试的包,在弹出菜单中选中[添加调试信息].这样 就为包体添加了调试信息。 3. 调 试存储过程现在 所有的准备工作都做好了,可以调试跟踪存储过程了。选择 需要调试的存储过程,点击右键,在弹出菜单中 选择[测试],进去测试窗口.测试窗口中有为了测试该存储过程自动所产生的代码,当然你也可以自己另外加入和修改代码,对于我们目前只是为了调试存储过程, 自动生成的代码已经足够了。接着按照如下的步骤进行调试。(1)添加存储过程所需要的参数,我们项目中的大多数存储过程都是需要参数 的,参数可以在测试窗口右下部分输入。如:GetPanNO_New需要一个输入参数v_employeeid,我们输入180,输出参数是mycursor,是查看结果的,不需要输入任何值。 (2)开始调试,点击[调试]菜单->[开始](或者按F9),就进去调试模式了,程序开始停在begin这一行. (3)以后的调试过程跟我们熟悉的的调试过程就一样了:运行(Ctrl+R)单步 进入(Ctrl+N)单步 跳过(Ctrl+O)单步 退出(Ctrl+T)或者 点击debug工具条上的按扭:当按Ctrl+N进去存储过程的源代码中后 在这 个窗口中可以查看过程中的变量值和堆栈。 (4)调试运行完了后,可以查看结果如下(点击mycursor变量旁边的按钮). 4. Tip 令人 比较郁闷的是我们项目中很多的存储过程都是一个SELECT语句,不管这个SELECT语句多么复杂(SELECT语句中有嵌套的子SELECT语句),它也只能作为一行代码,单步跟踪就没有什么意义了。

‘伍’ MSSQL 触发器调用有返回值的存储过程,测试没有返回,不知道啥原因

你如何判断没有返回值?的执行存储过程后,也没有输出
仅仅是在触发器执行了个存储过,既没有输出又不能用变量在外部接收

---------------------------------------------------------------
如果你要测试输出,先要保证操作的内容会准确到达
我建议你最好在exec前后都加上print或者select输出

‘陆’ SQL 从触发器获得的值发送到存储过程中获取不到结果集

你可以在触发器上调用存储过程,
触发器中有两个临时表inserted 和deleted ,这两个表的表结构和创建触发器的表是一样的,
inserted表存的是当前插入或更新后的值,
deleted表存的是当前删除或修改前的值.
你可以利用以上两个临时表的值来获得你要的参数值,然后调用时传入存储过程
另外你也可以直接在触发器中操作,不用存储过程。

‘柒’ 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 约束不同的是,触发器可以引用其它表中的列。

(7)sql触发器调用存储过程扩展阅读:

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

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

‘捌’ SQL SERVER能不能在触发器里调用远程服务器的存储过程,怎么做。急!!,

windows 服务中 检测MSDTC是否启动
Distributed Transaction Coordinator

热点内容
罗布乐思账号密码手机号多少 发布:2025-01-11 18:00:55 浏览:401
在广州什么配置的车才能跑滴滴 发布:2025-01-11 18:00:52 浏览:891
安卓手机哪个生态好 发布:2025-01-11 17:56:01 浏览:272
数据库数据的一致性 发布:2025-01-11 17:30:45 浏览:708
手机怎么设置手势安卓 发布:2025-01-11 17:15:54 浏览:965
威能壁挂炉解压阀 发布:2025-01-11 17:15:53 浏览:560
突破服务器ip限制 发布:2025-01-11 17:11:23 浏览:819
支付宝上传凭证 发布:2025-01-11 17:10:29 浏览:877
怎么打开行李箱的密码锁 发布:2025-01-11 17:09:51 浏览:594
苹果怎么删除id账号和密码 发布:2025-01-11 17:09:50 浏览:785