【问题标题】:How to set Virtual Table(Inserted and Deleted) Values in Trigger如何在触发器中设置虚拟表(插入和删除)值
【发布时间】:2013-09-29 16:36:22
【问题描述】:

当更新事件发生时,我正在更新一个名为 A 的表,触发器被触发。我的要求是我需要将数据插入另一个表(从 A 到 B),并且该表的值是从虚拟表(已删除和已插入)中获得的。如何设置插入和删除的虚拟表值

触发

CREATE TRIGGER trgAfterUpdate ON A
FOR UPDATE
AS
BEGIN
Insert into B(col1,col2,col3,col4,col5) values ()  // col1 to 4 inserted values col5 Deleted table value
END

【问题讨论】:

  • 表A有主键吗?
  • @GarethD 是具有自动标识的主键

标签: c# sql sql-server sql-server-2008 triggers


【解决方案1】:

我在同一类型的项目中工作,我必须在一定时间后定期更新并将其插入表中,但表中应包含所有唯一值...为了解决这个问题,我做了以下操作。

  1. 取了两张相似实体表。

  2. 在其中一个表中,我获取了所有值,然后我将其与其他表进行比较以获取重复数据,然后将其删除,然后通过将表复制到另一个表将其插入新表。


SqlCommand cmd2 = new SqlCommand("delete table2 from table2 inner join tabl1 on table1.some entries=table2.on same entry", connection_object);       
cmd2.ExecuteNonQuery();
SqlCommand cmd3 = new SqlCommand("insert into table1 (all values) select all values from table2", connection_object);
cmd3.ExecuteNonQuery();
connection_object.Close();

【讨论】:

    【解决方案2】:
    Insert B(col1,col2,col3,col4,col5) 
    select inserted.col1, inserted.col2, inserted.col3, inserted.col4, deleted.col5
    from inserted
         inner join deleted on inserted.IDField = deleted.IDField
    

    【讨论】:

    • 所以你的代码看起来像“插入到 B(col1,col2,...) 值中(选择插入的.col1,...从插入的内部连接中删除在插入的 col5=deleted.col5 )”对吗?
    • 如果 col5 是唯一 ID,那么它通常不应该改变,那么为什么需要删除的表?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    • 2022-11-28
    • 2015-04-26
    相关资源
    最近更新 更多