将依赖记录插入多个表中一次



我有一个在多个字段中接受输入的表单。

然而,从表面上看,它们似乎都组合在一起,但在数据库中它们都属于不同的表,并且它们都相互依赖,问题是如何将记录插入多个相互引用的表中,以便Table 2需要Table 1输入的数据中的主键才能在其中插入记录。

目前我以以下方式执行此操作:

-- Running an insert query
INSERT INTO table1(...) VALUES(…);
--Reading the parimry key from the last query
SELECT subId from table1 sub WHERE sub.peId=@pEquipment AND sub.shId=@sh AND sub.subName=@sEquipment AND sub.make=@make AND sub.model=@model AND sub.serialNo=@serial;
--Inserting in the second table
INSERT INTO table2(subId,table2) VALUES(…);
--Reading primary key from the second table
SELECT table2Id FROM table2 p WHERE p.subId=@subId,p.table2=@table2;
-- Insert in the third table
INSERT INTO table3(table2Id,table3,table3Desc) VALUES(…);
然而,这不是

我认为的正确方式吗?很多来回连接打开和关闭,读取写入加上如果查询在中间失败,那么模式会处于不一致的状态吗?

  • 有没有办法在一个查询中插入多个记录?
  • 或者我应该在这里使用什么其他方法?

您可以编写一个存储过程,并将其全部插入到一个事务和一个调用中。此外,还可以使用 SCOPE_IDENTITY() 获取在上一个命令中插入的标识值:

CREATE PROCEDURE Proc_Name (... parameter list ...)
AS
BEGIN TRAN
INSERT INTO table1(...) VALUES(…);
INSERT INTO table2(SCOPE_IDENTITY(),table2) VALUES(…);
INSERT INTO table3(SCOPE_IDENTITY(),table3,table3Desc) VALUES(…);
COMMIT TRAN

最新更新