求救,帮我写个触发器语句,种类越多越好

qiubolecn 2002-03-08 11:30:36
有Table3
lsh col1 col2
----------- ---------- ----------
1 13 aaa
2 3 bbb
3 3 ccc
4 4 ddd
和Table4
ol1 col2 col3
---------- ---------- ----------
13 aaa 3
3 bbb 35345L
3 ccc e
4 ddd asd
13 sssa NUsssL
想在Table3中建一个触发器


当修改Table3的col1时将Table4的col1也修改

我自己写了一个,在delphi里调用总是有问题
CREATE TRIGGER update1 ON [dbo].[Table3]
FOR UPDATE
AS
if update(col1)
update table4 set col1=(select inserted.col1 from inserted,deleted where inserted.lsh=deleted.lsh) where col1 in (select col1 from deleted)
不知道有没有其它的好的办法
...全文
27 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiubolecn 2002-03-11
  • 打赏
  • 举报
回复
经我仔细查看,原来这是ado接受了返回的行,在触发器前加上

set nocount on 就一切都没问题了,谢谢大家的关心

都有分,海兄的分当然要多一点,大家没意见吧
cxmcxm 2002-03-10
  • 打赏
  • 举报
回复
是TABLE3不能修改还是TABLE3修改之后TABLE4返回错误的结果,建议直接在SERVER上执行通过再在DEPHI上执行。
Yang_ 2002-03-09
  • 打赏
  • 举报
回复
to:qiubolecn(来自差生市)
应该有收获,至少海兄的语句比你原来的有效清楚!
qiubolecn 2002-03-08
  • 打赏
  • 举报
回复
楼上的方法在delphi中的ado中调用失败:(
昵称被占用了 2002-03-08
  • 打赏
  • 举报
回复
CREATE TRIGGER update1 ON [dbo].[Table3]
FOR UPDATE
AS
if update(col1)
update table4 set
col1=i.Col1
from Table4 b,inserted i,deleted d
where d.col1=b.col1
and i.lsh=d.lsh
go
qiubolecn 2002-03-08
  • 打赏
  • 举报
回复
唉,估计是ado的bug,可怜我的200分
dgnt 2002-03-08
  • 打赏
  • 举报
回复
CREATE TRIGGER DBO.DELETE_SONHISUNIT
ON HISUNIT FOR DELETE
AS

DELETE FROM HISTAG where [id] in ( select HISTAG.[id] from HISTAG
INNER JOIN DELETED ON HISTAG.PARENT_ID=DELETED.[ID])
xzou 2002-03-08
  • 打赏
  • 举报
回复
该不会时这个意思吧
CREATE TRIGGER update1 ON [dbo].[Table3]
FOR UPDATE
AS
if update(col1)
update table4 set
col1=i.Col1
from Table4 b,inserted i,deleted d
where d.lsh=b.lsh
and i.lsh=d.lsh
go
OldMan0516 2002-03-08
  • 打赏
  • 举报
回复
Agree with Yang_(扬帆破浪)
OldMan0516 2002-03-08
  • 打赏
  • 举报
回复
应该没有问题,如果Lsh也可能修改的话,去掉and i.lsh=d.lsh
Yang_ 2002-03-08
  • 打赏
  • 举报
回复
你的表之间的逻辑有问题!
你的TABLE3的COL1有重复,会造成修改异常。
比如,你修改ID=3的TABLE3数据,COL1改为8, 触发器只能把你TABLE4的两条COL1=3的数据改成COL1=8,那样会造成你的ID=2的TABLE3数据在TABLE4没有对应数据。

可能你的这个逻辑是允许的,但你没有说清楚。
superjj2002 2002-03-08
  • 打赏
  • 举报
回复
hehe,look
qiubolecn 2002-03-08
  • 打赏
  • 举报
回复
我所谓的调用是指
在程序里更改Table3里的数据
昵称被占用了 2002-03-08
  • 打赏
  • 举报
回复
呵呵,触发器怎么还有调用失败呢?
怎么调用的?如果是在程序里调用以上语句来挂触发器,那加上一些语句:

if exists (select * from sysobjects where id = object_id('dbo.update1') and sysstat & 0xf = 8)
drop trigger dbo.update1
GO

CREATE TRIGGER update1 ON [dbo].[Table3]
FOR UPDATE
AS
if update(col1)
update table4 set
col1=i.Col1
from Table4 b,inserted i,deleted d
where d.col1=b.col1
and i.lsh=d.lsh
go

实在看不出这个触发器会错!!

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧