1

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

我需要的是:

将插入的最新数据添加table1table2.

那可能吗?

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

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

我有这两张表:

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.
4

2 回答 2

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 小提琴演示

但是,如果您想使用第一个表中插入的值更新第二个表表单,请尝试使用以下语句代替INSERT子句:

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

SQL 小提琴演示

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

   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 小提琴演示

如果不使用标准方法这样做:

   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 小提琴演示

于 2012-11-04T07:57:00.703 回答
1

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

于 2012-11-04T07:39:20.493 回答