SQL触发器不起作用

时间:2021-08-30 23:15:33
要实现对A表更新,B表也同样更新

触发器代码如下


Create Trigger trufqpz             --触发器名称 
On yfqpz                         --在yfqpz表中创建触发器  A表
for Update                          --为什么事件触发 
As                                        --事件触发后所要做的事情 
if Update(fzqk)                           --要更新的字段
begin 

Update yxinxi                                --要触发的表   B表
Set fzqk=i.fzqk 
From yxinxi br , Deleted   d ,Inserted i      --Deleted和Inserted临时表 
Where br.fzqk=d.fzqk

END


注:
Deleted 与Inserted分别表示触发事件的表“旧的一条记录”和“新的一条记录”。 
一个数据库系统中有两个虚拟表用于存储在表中记录改动的信息,分别是: 
虚拟表Inserted                     虚拟表Deleted 

开始的时候这个代码有触发作用,后来我再B表也写了个触发器,即B触发,A也触发,发现最后成了间接递归了,于是删除B表的触发器,只留下A表的,发现修改A表可以,但是B表没有同样修改

大家帮忙看看啊

另外我鼠标光标悬停到 触发器的浅蓝色代码上 显示出 transact-sql intellisense中当前不支持 alter trigger

意思大概是说不 支持创建触发器的意思,是不是跟这个也有关系呢??


大家帮忙看看啊,新手分数不多 见谅,就是把遇到的问题拿来大家探讨一下

8 个解决方案

#1


alter/*create*/ trigger grade_modify  
    on Tb
    for INSERT
    as
   begin
     select name from inserted--tb表刚刚插入的数据
     你想做的操作   
   end
给个简单示例,看是否能对你有所启发,这是一个插入触发器,如果tb表有数据插入则会触发

#2



提示什么吗

#3


引用 2 楼 csharpvb 的回复:
提示什么吗


我用的是VS2010执行之后 提示命令完成,但是就是不起作用

#4


create trigger tupdate_yfqpz on a
for update 
as 

if update(fzqk)
begin
 update b set fzqk=i.fzqk from b,inserted i,deleted d
 where i.fqid = d.fqid
 and i.fzqk <> d.fzqk
 and b.fqid = i.fqid
end

#5


create trigger tupdate_yfqpz on a
for update ,delete
as 

if update(fzqk)
begin
 update b set fzqk=i.fzqk from b,inserted i,deleted d
 where i.fqid = d.fqid
 and i.fzqk <> d.fzqk
 and b.fqid = i.fqid
end

#6


引用 5 楼 fredrickhu 的回复:
SQL code
create trigger tupdate_yfqpz on a
for update ,delete
as 

if update(fzqk)
begin
 update b set fzqk=i.fzqk from b,inserted i,deleted d
 where i.fqid = d.fqid
 and i.fzqk <> d.fzqk
 a……


5楼大哥,我贴上了 但是说a没有声明什么的饿··闹心啊~ 我菜鸟

#7


引用 6 楼 xlyytcych 的回复:
引用 5 楼 fredrickhu 的回复:
SQL code
create trigger tupdate_yfqpz on a
for update ,delete
as

if update(fzqk)
begin
update b set fzqk=i.fzqk from b,inserted i,deleted d
where i.fqid = d.fqid
and……

先在数据库使用SQL脚本更新数据测试你的触发器是否有效的,如果无效,检查触发器,如果有效,查看程序是否执行更新语句是否成功。。。从多个地方去排查问题,你最终会正确的(注:我也是个小菜鸟)

#8


将 fzqk改为 唯一约束的 就是类似主键的,不会重复的,以前我也出过类似错误,猜你的fzqk不能唯一确定

#1


alter/*create*/ trigger grade_modify  
    on Tb
    for INSERT
    as
   begin
     select name from inserted--tb表刚刚插入的数据
     你想做的操作   
   end
给个简单示例,看是否能对你有所启发,这是一个插入触发器,如果tb表有数据插入则会触发

#2



提示什么吗

#3


引用 2 楼 csharpvb 的回复:
提示什么吗


我用的是VS2010执行之后 提示命令完成,但是就是不起作用

#4


create trigger tupdate_yfqpz on a
for update 
as 

if update(fzqk)
begin
 update b set fzqk=i.fzqk from b,inserted i,deleted d
 where i.fqid = d.fqid
 and i.fzqk <> d.fzqk
 and b.fqid = i.fqid
end

#5


create trigger tupdate_yfqpz on a
for update ,delete
as 

if update(fzqk)
begin
 update b set fzqk=i.fzqk from b,inserted i,deleted d
 where i.fqid = d.fqid
 and i.fzqk <> d.fzqk
 and b.fqid = i.fqid
end

#6


引用 5 楼 fredrickhu 的回复:
SQL code
create trigger tupdate_yfqpz on a
for update ,delete
as 

if update(fzqk)
begin
 update b set fzqk=i.fzqk from b,inserted i,deleted d
 where i.fqid = d.fqid
 and i.fzqk <> d.fzqk
 a……


5楼大哥,我贴上了 但是说a没有声明什么的饿··闹心啊~ 我菜鸟

#7


引用 6 楼 xlyytcych 的回复:
引用 5 楼 fredrickhu 的回复:
SQL code
create trigger tupdate_yfqpz on a
for update ,delete
as

if update(fzqk)
begin
update b set fzqk=i.fzqk from b,inserted i,deleted d
where i.fqid = d.fqid
and……

先在数据库使用SQL脚本更新数据测试你的触发器是否有效的,如果无效,检查触发器,如果有效,查看程序是否执行更新语句是否成功。。。从多个地方去排查问题,你最终会正确的(注:我也是个小菜鸟)

#8


将 fzqk改为 唯一约束的 就是类似主键的,不会重复的,以前我也出过类似错误,猜你的fzqk不能唯一确定