如何在sql server 2008中向表中添加记录后更新另一个表

时间:2012-11-04 07:36:42

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

我在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.

2 个答案:

答案 0 :(得分:2)

以下是一个例子:

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

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

   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

答案 1 :(得分:1)

你需要使用触发器,这不是什么大问题,做一些研究,你会上网。