【问题标题】:I need a function which will insert rows in multiple tables我需要一个在多个表中插入行的函数
【发布时间】:2017-05-22 22:04:51
【问题描述】:

postgresql

所以我在 table1 中插入一行,这一行包含一个字段,它是 table2 中的一个字段。所以我想创建一个函数,当我在 table1 中插入一行时,它将在 table2 中插入一行。 例如: 我有两张桌子

 table1
 ....
 ....
 .... 

table2
....
....
.... 

我在 table1 中插入 插入 table1 值(“Sam”,“USA”); 结果我想拥有

table1
Sam Usa
...
...
...

table2
Usa ...
...
...

那么我应该写什么函数和什么触发器?此外,如果 table2 中有一行包含 USA 字段,则此函数不应再插入一行包含 USA

对不起,如果我解释得太复杂了

【问题讨论】:

  • 我认为这可能是XYProblem 那是因为您在这里尝试做一些不好的做法,复制您的数据。如果您尝试在 table1 中为该字段插入的每个值都应该在 table2 中,那么正确的方法是在 table1 中拥有来自 table2 的外键。阅读提供的链接,然后更好地解释您的问题,以便我们为您提供一个非常好的解决方案,而不是针对糟糕设计的解决方案。

标签: database postgresql function triggers


【解决方案1】:

就像@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

【讨论】:

    猜你喜欢
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-30
    • 2012-01-22
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    相关资源
    最近更新 更多