【问题标题】:Insert trigger on a table with extra constant column in to new table?在具有额外常量列的表上插入触发器到新表中?
【发布时间】:2014-01-24 19:11:52
【问题描述】:

我一直在研究一个由两个模式名称组成的数据库,即前端和备份。在一个表名中的位置:

front.Details

studID SemID GPA
100     1     4
200     2     3

另一个表名是:

backup.DetailsV
studID  DEPT SemID GPA

Table backup.DetailsV 中的输出应如下所示:

studID  DEPT SemID GPA
100      1     1    4
200      1     2    3
100      2     1    4
200      2     2    3 

如何在表 Details 上创建触发器以两次插入到表 DetailsV 中,部门 ID 为 1 和 2?

【问题讨论】:

  • 为什么需要物理表和触发器?为什么添加此列的视图还不够?
  • @Damien_The_Unbeliever:我不明白你的问题。我的问题是,如果在 details 表中有一个新插入,则必须将新行插入到具有一个额外列的 DetailsV 表中。新记录必须是使用 deptID 1 和 deptID 2 插入两次。
  • 我在问为什么这个表需要存在?我可以创建一个视图,为Details 中的每一行生成两行,它们的不同之处仅在于一个具有1 的deptID 值,另一个具有2。
  • @Damien_The_Unbeliever :有一个存储过程被设计成可以访问 DetailV 表。并且会有很多数据从另一个表插入到 DetailV 表中。

标签: sql sql-server triggers insert updates


【解决方案1】:

继续 Damien 的想法,如果拥有 DetailsV 表的唯一原因是生成该输出,那么您可以使用视图轻松做到这一点。如果只是读取数据,存储过程不知道也不关心源是表还是视图。

Select studID, 1 as Dept, SemID, GPA
From front.Details
UNION ALL 
Select studID, 2 as Dept, SemID, GPA
From front.Details

如果您需要保留流经 front.Details 表的数据的历史记录,或者如果您需要在报告数据之前对其进行操作,那么您只会保留一个备份表。如果这确实是您想要的,那么触发器查询非常相似,但不是寻址表,而是使用特殊的 [插入] 表来获取新值。

Select studID, 1 as Dept, SemID, GPA
From inserted
UNION ALL 
Select studID, 2 as Dept, SemID, GPA
From inserted

【讨论】:

    猜你喜欢
    • 2021-02-27
    • 2017-10-26
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    • 2013-11-22
    • 2017-12-18
    相关资源
    最近更新 更多