【问题标题】:Adding modify and delete to insert trigger添加修改和删除以插入触发器
【发布时间】:2015-09-04 04:55:26
【问题描述】:

我的任务是将记录从一个表 (T1) 推送到另一个表 (T2)。我将插入部分完成如下:

CREATE TRIGGER [dbo].[CP_to_TW2] 
   ON  [dbo].[TEST_PROJ] 
   FOR INSERT
AS 
BEGIN
INSERT INTO dbo.TEST_TW (PROJECT_ID,PROJECT_DESC,PROJECT_MANAGER) 
SELECT PROJ_ID,PROJ_ID+PROJ_NAME,PROJECT_MANAGER FROM inserted

END

TEST_PROJ 是 T1,TEST_TW 是 T2。 PROJECT_ID 和 PROJ_ID 列存储唯一 ID。触发器正确触发并将相应的行插入 T2。但是,我不确定如何对 T1 进行修改以在 T2 中显示。例如,如果项目经理在 T1 中更新,它也需要在 T2 中更新。除此之外,我不确定如何在 T1 中删除 T2 中的记录时删除它们。任何帮助将不胜感激。

【问题讨论】:

标签: sql-server triggers insert dml


【解决方案1】:

您也可以为删除或更新操作创建触发器,在更新中,除了插入之外,您还删除了表

CREATE TRIGGER [dbo].[CP_to_TW2] 
   ON  [dbo].[TEST_PROJ] 
   AFTER UPDATE
AS 
BEGIN
UPDATE TEST_TW....

END

CREATE TRIGGER [dbo].[CP_to_TW2] 
   ON  [dbo].[TEST_PROJ] 
   AFTER DELETE
AS 
BEGIN
DELETE FROM dbo.TEST_TW (PROJECT_ID,PROJECT_DESC,PROJECT_MANAGER) 
WHERE xxx in (SELECT xxx FROM deleted)


END

【讨论】:

  • 谢谢西蒙娜。我首先处理 UPDATE 部分并具有以下内容: ALTER TRIGGER [dbo].[CP_to_TW3] ON [dbo].[TEST_PROJ] AFTER UPDATE AS BEGIN UPDATE dbo.TEST_TW SET TEST_TW.PROJECT_ID = TEST_PROJ.PROJ_ID, TEST_TW.PROJECT_DESC = TEST_PROJ.PROJ_ID+TEST_PROJ.PROJ_NAME, TEST_TW.PROJECT_MANAGER = TEST_PROJ.PROJECT_MANAGER FROM TEST_TW INNER JOIN TEST_PROJ ON TEST_TW.PROJECT_ID = TEST_PROJ.PROJ_ID END 当我添加新字段时它没有触发。你能指出我可能出错的地方吗?
  • 在更新触发器中你已经插入和删除了; if=would try something like this ALTER TRIGGER [dbo].[CP_to_TW3] ON [dbo].[TEST_PROJ] AFTER UPDATE AS BEGIN UPDATE dbo.TEST_TW SET TEST_TW.PROJECT_ID = T.PROJ_ID, TEST_TW.PROJECT_DESC = T.PROJ_ID+T .PROJ_NAME, TEST_TW.PROJECT_MANAGER = T.PROJECT_MANAGER FROM TEST_TW INNER JOIN 已删除 TON TEST_TW.PROJECT_ID = T.PROJ_ID END。考虑到您必须确保两个表必须共享相同的数据才能进行更新
  • 啊,好的。这更有意义。谢谢!
猜你喜欢
  • 2015-05-13
  • 1970-01-01
  • 2019-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-27
  • 1970-01-01
  • 2011-05-05
相关资源
最近更新 更多