【问题标题】:How can i update another tables after adding record to a table in sql server 2008向 sql server 2008 中的表添加记录后如何更新另一个表
【发布时间】:2012-11-04 07:36:42
【问题描述】:

我在 SQL Server 2008 中创建了两个相同的表。

我需要的是:

table1中插入的最新数据添加到table2中。

这可能吗?

诸如服务、触发器或存储过程之类的东西?

我认为我必须使用触发器,但我不知道如何。

我有这两张表:

table1  ( field1,field2,field3 )
table2  ( field1,field2,field3 )

当我插入 table1 时,我需要按照以下过程更新 table2:

> IF NotExist(field1=value) in table2 THEN INSERT Into table2 ELSE UPDATE table2
> with new field1 value.

【问题讨论】:

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


    【解决方案1】:

    这是一个例子:

    USE DatabaseName;
    GO
    IF OBJECT_ID ('Sch.UpdateSecondTable', 'TR') IS NOT NULL
       DROP TRIGGER Sch.UpdateSecondTable;
    GO
    CREATE TRIGGER Sch.UpdateSecondTable
    ON FirstTable
    AFTER INSERT
    AS 
        INSERT INTO SecondTable 
        SELECT * FROM Inserted
    GO
    

    SQL Fiddle Demo

    但是,如果您想使用第一个表中插入的值更新第二个表表单,请尝试使用此方法而不是 INSERT 子句:

    UPDATE t2
    SET t2.name = t1.name
    FROM SecondTable t2
    INNER JOIN inserted t1 ON t1.id = t2.id
    

    SQL Fiddle Demo

    更新:如果您只想插入第二个表中不存在的值。如果这些表具有相同的结构,即相同的列号和相同的数据类型。您可以使用EXCEPT 集合运算符来执行此操作:

       UPDATE t2
       SET t2.name = t1.name
       FROM SecondTable t2
       INNER JOIN
       (
         SELECT * FROM inserted t1
         EXCEPT SELECT * FROM SECONDTABLE
       ) t1 ON t1.id = t2.id
    

    SQL Fiddle Demo

    如果不使用标准方法来执行此操作:

       UPDATE t2
       SET t2.name = t1.name
       FROM SecondTable t2
       INNER JOIN
       (
         SELECT * FROM inserted t1
         WHERE id NOT IN(SELECT id FROM SECONDTABLE)
       ) t1 ON t1.id = t2.id
    

    SQL Fiddle Demo

    【讨论】:

    • 谢谢我必须检查第二个表是否存在记录以检查它是否应该在 table2 中插入新记录或更新 table2 中的记录我如何在触发器中检查它?
    【解决方案2】:

    你需要使用触发器,没什么大不了的,做一些研究,你就会上网。

    【讨论】:

    • 希望你举个例子
    • 首先您需要学习并尝试自己编写代码,然后如果您在编写代码时遇到任何问题,您将在这里获得帮助。但是你不能指望 stackoverflow.com 中的完整代码示例,它违反了政策。
    • 真的很简单,你只需要搜索“插入触发器后:你会在 Stackoverflow 或其他网站上找到示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多