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

sql触发器的问题

发布时间: 2022-08-22 08:17:44

sql触发器问题

自身直接触发的话默认并不递归(需要递归可以设置“数据库-选项-杂项-递归触发器已启用”为true,如果要通过Sql代码设置这些选项请自行网络下);
但如果通过影响其他表再通过其他触发修改的话就会递归(也就是间接递归)。

PS,无论是直接的还是间接的递归都不是无限的。

② SQL触发器的简单问题

-- 给表A建立insert触发器
CREATE TRIGGER trig_A_insert ON A FOR INSERT AS
-- 向表B中添加数据,添加内容为刚刚添加到表A的Name列的值
insert into B values (select name from inserted)
go

-- 向A表添加数据,触发上面的触发器
insert into A values ('张三', '北京')

③ 关于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触发器能够解决哪些问题

Microsoft SQL Server™ 2000 提供了两种主要机制来强制业务规则和数据完整性:约束和触发器。触发器是一种特殊类型的存储过程,它在指定的表中的数据发生变化时自动生效。唤醒调用触发器以响应 INSERT、UPDATE 或 DELETE 语句。触发器可以查询其它表,并可以包含复杂的 Transact-SQL 语句。将触发器和触发它的语句作为可在触发器内回滚的单个事务对待。如果检测到严重错误(例如,磁盘空间不足),则整个事务即自动回滚。
触发器可以引用其它表中的列。例如,触发器可以使用另一个表中的 SELECT 比较插入或更新的数据,以及执行其它操作,如修改数据或显示用户定义错误信息。 触发器也可以评估数据修改前后的表状态,并根据其差异采取对策。 一个表中的多个同类触发器(INSERT、UPDATE 或 DELETE)允许采取多个不同的对策以响应同一个修改语句。

⑤ 关于SQL触发器问题

instead触发器是对数据进行增、删、改操作前进行触发器中的操作,并放弃用户实际操作的增、删、改操作,其实就是替代了触发,等于是在触发器内部完成增删改操作,而不去真实的执行用户实际的操作,比如insert操作,你可以在触发器里完成insert操作,但是用户实际的insert操作是不被执行的

⑥ sql 触发器问题

改一下中间那句话试试:

create trigger test on perempms
for update
as
begin

declare @staff_no char(10)
declare @rank varchar(50)

--select @staff_no=staff_no,@rank=rank from updated
---把这句话改一下,然后,放到下面的if语句里,这样可以提高效率
--只有当更新字段是rank时,才触发
--另外,下面改的那两句,要一句就可以了,要么取改之前的,要么取改之后的

if update(rank)
begin

----想把改之前的数据值set到另外的表里,改为:
----select @staff_no=staff_no,@rank=rank from deleted

--想把改之后的数据值set到另外的表里,改为:
select @staff_no=staff_no,@rank=rank from inserted

update paygrastaff set grade_code=@rank where staff_no=@staff_no
end

end

⑦ 关于Sql触发器的问题。

将数据库里面的字段A当做触发器而用字母A来表示这个触发器,以后可以这个触发器的名字就是A

⑧ SQL数据库触发器问题

我认为 触发器 能包含 存储过程 可以吧
而我这个存储过程里的内不一定是本数据库中的表啊

比如说我有A B两个表 A表中是 员工表 字段: ID 工资
B表里是 : 工时

A表在数据库 X 里 B表在数据库Y里,而我现在要在触发器中 根据我B表的工时 调用我自定义的函数 算出结果寸入A中
满意请采纳。

⑨ SQL 触发器的问题

你这个
用sqlserver
定时代理

完成吧,同学
管理->SQL
Server代理->作业(按鼠标右键)->
新建作业
点步骤
新建个
写上
update
的sql
就可以的
如果
用sql
网上
看了下
好像有个
存储过程,可以实现,太
复杂

也没测试过
用这个吧
同学

⑩ SQL触发器的问题

create trigger tr_卷烟库存表 on 卷烟库存表
for insert
as
begin
if not exists(select * from 卷烟库存表 where 库存金额 = 库存数量 * 库存单价)
update 卷烟库存表 set 库存金额 = 库存数量 * 库存单价
end