SQL2005,如何查看数据库中哪个表使用了触发器

SQL2005,如何查看数据库中哪个表使用了触发器,第1张

SQL2005,如何查看数据库中哪个表使用了触发器
执行下SQL语句:
select
triname AS TriggerName,
triis_disabled AS IsDisable,
triis_instead_of_trigger AS IsInsteadOfTrigger,
ctext AS CreateTriggerSQL
from
systriggers tri LEFT OUTER JOIN
dbosyscomments c ON triobject_id = cid
有俩个表A,B。当A表数据发生变化时,B表想对应的值也发生变化。这个触发器怎么
参考下贴
>呵呵,看到你的这个问题了,回答一下,希望能给你增加印象。
由于sqlserver
没有oracle中的行级触发器的概念,触发器如下:
create
trigger
[tc2]
on
[dbo][teacher]
for
insert,update
as
if
(select
salary
from
inserted)<3000
update
teacher
set
salary=3000
and
tid=
(select
tid
from
inserted)
说明:当你插入数据的时候,这条数据是存放在inserted表中的,在这个表中把teacher表的主键得到(假如是tid)然后把这个主键信息加到where
条件上,这样就能起到只更新插入的那一条数据的效果了,否则会出现更新了全表的问题。
---
以上,希望对你有所帮助。

select  from user_objects where object_name = trigger_name  and status='INVALID'

甲骨文股份有限公司(NASDAQ:ORCL,Oracle)是全球大型数据库软件公司。总部位于美国加州红木城的红木岸(Redwood Shores),现时首席执行官为公司创办人劳伦斯·埃里森(Lawrence J Ellison)。

触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行 *** 作( insert,delete, update)时就会激活它执行。

触发器可以查询其他表,而且可以包含复杂的SQL语句。它们主要用于强制服从复杂的业务规则或要求。例如:您可以根据客户当前的帐户状态,控制是否允许插入新订单。

触发器也可用于强制引用完整性,以便在多个表中添加、更新或删除行时,保留在这些表之间所定义的关系。然而,强制引用完整性的最好方法是在相关表中定义主键和外键约束。如果使用数据库关系图,则可以在表之间创建关系以自动创建外键约束。

触发器与存储过程的唯一区别是触发器不能执行EXECUTE语句调用,而是在用户执行Transact-SQL语句时自动触发执行。

最基本的触发器是针对表的insert、update、delete这三种 *** 作来的。触发器可以建立在表上,也可以建立在视图上。建立在表上的触发器会在表内容发生改变时触发。建立在视图上的触发器会在视图内容改变时触发。注意,视图触发器仅会在明确对视图进行 *** 作的sql语句执行时才会触发,当基本表的内容发生改变而引起视图内容变化时,不会触发视图触发器。
下面是建立表触发器的代码:
create
or
replace
trigger
tg_e_contact
before
update
or
insert
or
delete
on
e_contact
for
each
row
begin
if
inserting
then
insert
into
e_contact@gaacworld
values
(:newtelephone,
:newemployeeid,
:newstatus);
else
if
updating
then
update
e_contact@gaacworld
s
set
stelephone
=
:newtelephone,
semployeeid
=
:newemployeeid,
sstatus
=
:newstatus
where
semployeeid
=
:oldemployeeid;
else
if
deleting
then
delete
from
e_contact@gaacworld
s
where
semployeeid
=
:oldemployeeid;
end
if;
end
if;
end
if;
end;
下面是建立视图触发器的代码:(注意里面的instead
of)
create
or
replace
trigger
tg_e_contact
before
instead
of
update
or
instead
of
insert
or
instead
of
delete
on
e_contact
for
each
row
begin
if
inserting
then
insert
into
e_contact@gaacworld
values
(:newtelephone,
:newemployeeid,
:newstatus);
else
if
updating
then
update
e_contact@gaacworld
s
set
stelephone
=
:newtelephone,
semployeeid
=
:newemployeeid,
sstatus
=
:newstatus
where
semployeeid
=
:oldemployeeid;
else
if
deleting
then
delete
from
e_contact@gaacworld
s
where
semployeeid
=
:oldemployeeid;
end
if;
end
if;
end
if;
end;

SQL Server
只要在创建触发器的时候没有指定WITH ENCRYPTION 选项,都能查看到源代码。
在SMSS的对象资源管理器中找到有触发器的表,展开,在下面的触发器项目下找到触发器的名字,双击(或者右击触发器名字,在菜单中选择编辑), 就能看到触发器的源代码了。

1. 打开PL/SQL Developer如果 在机器上安装了PL/SQL Developer的话,打开PL/SQL Developer界面输入 用户名,密码和host名字,这个跟在程序中webconfig中配置的完全相同,点击确定 找到 需要调试的存储过程所在的包(Package bodies),如PACK_ACTIVITY,点击右键,在d出菜单中选择[查看],得到包中的所有存储过程和他们的代码
2. 添加debug信息为了 能够单步跟踪存储过程,需要为其所在的包添加debug信息,右键点击需要调试的包,在d出菜单中选中[添加调试信息](这个很重要)这样 就为包体添加了调试信息。
3. 调 试存储过程现在 所有的准备工作都做好了,可以调试跟踪存储过程了。选择 需要调试的存储过程,点击右键,在d出菜单中 选择[测试],进去测试窗口测试窗口中有为了测试该存储过程自动所产生的代码,当然你也可以自己另外加入和修改代码,对于我们目前只是为了调试存储过程, 自动生成的代码已经足够了。接着按照如下的步骤进行调试。
(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语句),它也只能作为一行代码,单步跟踪就没有什么意义了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13345055.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-18
下一篇 2023-07-18

发表评论

登录后才能评论

评论列表(0条)

保存