【高手请进】触发器

cfderp 2010-07-13 07:32:46
麻烦高手帮忙,还是触发器的问题,A、B两张表,A表有id、xingming(姓名)、bianhao(编号)、zuoyeliang(作业量)。B表字段和A表一样。当A表新增一条记录时,B表同样增加一条记录,A表新增的记录删除时B表触发过来的记录不变。当A表只修改一条记录的“作业量”字段的数据时B表触发过来的相应的记录同样修改“作业量”字段数据。当A表修改一条记录的“姓名”、“编号”字段内容时,B表新增一条同样的记录。麻烦大家帮忙了,触发器不太明白,谢谢大家
...全文
85 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
cfderp 2010-07-15
  • 打赏
  • 举报
回复
感谢htl258的帮助,谢谢你的指点
claro 2010-07-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 htl258 的回复:]
SQL code
CREATE TRIGGER tr_test ON a
FOR INSERT, UPDATE
AS
IF NOT EXISTS(
SELECT 1
FROM DELETED
)
OR
UPDATE (xingming) OR UPDATE (bianhao)
……
[/Quote]顶
v1ctory1216 2010-07-14
  • 打赏
  • 举报
回复
加个括号试一下(upadata(xingming) or upadata(bianhao))
cfderp 2010-07-14
  • 打赏
  • 举报
回复
CREATE TRIGGER tr_test ON a
FOR INSERT, UPDATE
AS
IF NOT EXISTS(
SELECT 1
FROM DELETED
)
OR
UPDATE (xingming) OR UPDATE (bianhao)
--以下考虑ID自增,如果ID非自增列,则加上ID字段。
INSERT b( xingming, bianhao, zuoyeliang )
SELECT xingming, bianhao, zuoyeliang
FROM INSERTED

IF UPDATE (zuoyeliang)
UPDATE b
SET b.zuoyeliang = i.zuoyeliang
FROM INSERTED i
WHERE b.id = i.id
GO
首先感谢htl258的帮忙,不过UPDATE (xingming) OR UPDATE (bianhao)这条语句有点问题,就是即使xingming和bianhao的值没变化也插入了一条语句。请大家帮忙啊
Colerterry 2010-07-14
  • 打赏
  • 举报
回复
顶,学习了!
htl258_Tony 2010-07-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 cfderp 的回复:]
CREATE TRIGGER tr_test ON a
FOR INSERT, UPDATE
AS
IF NOT EXISTS(
SELECT 1
FROM DELETED
)
OR
UPDATE (xingming) OR UPDATE (bianhao)
--以下考虑ID自增,如果ID非自增列,则加上ID字段。
INSERT b( xin……
[/Quote]


CREATE TRIGGER tr_test ON a
FOR INSERT, UPDATE
AS
IF NOT EXISTS(
SELECT 1
FROM DELETED
)
OR
UPDATE (xingming) OR UPDATE (bianhao)
--以下考虑ID自增,如果ID非自增列,则加上ID字段。
INSERT b( xingming, bianhao, zuoyeliang )
SELECT xingming, bianhao, zuoyeliang
FROM INSERTED i
WHERE NOT EXISTS(
SELECT 1
FROM b
WHERE id = i.id
AND CHECKSUM(bianhao, zuoyeliang) = CHECKSUM(i.bianhao, i.zuoyeliang)
)

IF UPDATE (zuoyeliang)
UPDATE b
SET b.zuoyeliang = i.zuoyeliang
FROM INSERTED i
WHERE b.id = i.id
GO
try again
htl258_Tony 2010-07-13
  • 打赏
  • 举报
回复
CREATE TRIGGER tr_test ON a
FOR INSERT, UPDATE
AS
IF NOT EXISTS(
SELECT 1
FROM DELETED
)
OR
UPDATE (xingming) OR UPDATE (bianhao)
--以下考虑ID自增,如果ID非自增列,则加上ID字段。
INSERT b( xingming, bianhao, zuoyeliang )
SELECT xingming, bianhao, zuoyeliang
FROM INSERTED

IF UPDATE (zuoyeliang)
UPDATE b
SET b.zuoyeliang = i.zuoyeliang
FROM INSERTED i
WHERE b.id = i.id
GO

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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