向 1:1 相关表中插入行

Posted

技术标签:

【中文标题】向 1:1 相关表中插入行【英文标题】:Insert rows to 1:1 related tables 【发布时间】:2019-01-21 21:08:21 【问题描述】:

我想将新行放入 sql-server 中 1:1 相关的表中。

如您所见,表使用相同的主键相互引用。这就是问题所在——我知道用两个INSERT 调用放置数据会抛出一个错误,说我违反了PK 约束。有没有办法在代码中执行此操作?我想创建一个存储过程,用于添加“初级产品”(SUROWCE)并对应于“库存”(STAN)中的记录。

我的代码尝试: INSERT INTO STAN VALUES(25, 5, 1000); INSERT INTO SUROWCE VALUES(25, 'wood');

Msg 547, Level 16, State 0, Line 4 The INSERT statement conflicted with the FOREIGN KEY constraint "FK_STAN_SUROWCE". The conflict occurred in database "TestBazyDanych", table "dbo.SUROWCE", column 'ID_SUROWCA'.

【问题讨论】:

听起来你想要一个AFTER INSERT 触发器。 从您发布的表格来看,这里有两个表格似乎没有必要。第二个表只不过是 STAN 中的一个 nvarchar(50)。为什么让它比它需要的更复杂?当然,有时单独的表是有意义的,但这似乎不是其中之一。 【参考方案1】:

在 1:1 关系中,只有一个表具有引用另一个表的外键。因此,您首先将 没有 外键插入到表中。尝试简单地颠倒插入的顺序:

INSERT INTO SUROWCE VALUES(25, 'wood');
INSERT INTO STAN VALUES(25, 5, 1000);

【讨论】:

而且,像往常一样,如果你想确保要么都成功,要么都不成功,这两个插入应该包装在一个事务中。

以上是关于向 1:1 相关表中插入行的主要内容,如果未能解决你的问题,请参考以下文章

如何在Oracle表中插入系统时间

向维度表中插入行时,oracle 服务器挂起

在 netezza 存储过程中立即执行不会向表中插入值

软件测试全套教程,2020年全新软件测试学习路线图

如何向表中插入数据以及如何更新删除表中的数据

mysql5.7基础 向指定数据库的指定表中插入符合要求的数据