当在一个表中插入导致在另一个表中插入时,我应该编写什么函数和触发器?

问题描述 投票:0回答:1

我应该编写什么函数和触发器,以便当我在

table1
中插入一行时,然后在
table2
中插入新行?
如果
table2
 中已经存在具有相同字段/值的行,则该函数不得在 
table2

中插入行

示例:
我有两张桌子:

table1
table2

我对
table1
执行 3 次单独的插入:("Sam","USA"), ("Jean", "USA"), ("Kath", "Canada")
结果我想要:

| table1 |         |
|--------|---------|
| name   | country |
| Sam    | USA     |
| Jean   | USA     |
| Kath   | Canada  |

and

| table2  |
|---------|
| country |
| USA     |
| Canada  |
database postgresql function triggers
1个回答
0
投票

就像@Jorge Campos 在评论中提到的那样,重复数据通常是个坏主意。

但是,如果您确实遇到需要执行此操作的情况,则需要在源表上创建触发器,并使用现有检查将数据插入目标表中。这是 SQL Server 中的示例:

CREATE TABLE Tbl1(
    Id INT NOT NULL IDENTITY PRIMARY KEY,
    Name NVARCHAR(100) NOT NULL 
)
GO

CREATE TABLE Tbl2(
    Id INT NOT NULL IDENTITY PRIMARY KEY,
    Name NVARCHAR(100) NOT NULL 
)
GO

CREATE TRIGGER Sync ON Tbl1 AFTER INSERT AS 

    INSERT INTO Tbl2 (Name)
    SELECT src.Name FROM inserted src
    LEFT JOIN Tbl2 dst ON src.Name = dst.Name 
    WHERE dst.Id IS NULL
GO

INSERT INTO Tbl1 (Name) VALUES ('STR')

SELECT * FROM Tbl2
© www.soinside.com 2019 - 2024. All rights reserved.