如何在 Sql 中为 Insert 命令锁定多个表
How to Lock multiple tables for Insert command in Sql
这是我的table结构
当我将数据插入第一个 table 时,它将在 table 2 中有多个条目
我正在使用代码
获取 ID
Select MAX(ID)+1 From Table1
插入数据
Insert Into Table1 Values('1','abc','add1');
Insert into table2 values('1','med','english');
Insert into table2 values('1','eng','english');
代码在单台计算机上运行良好,但是当我们在多个终端的应用程序中使用时,它插入了错误的数据,即 table2
中另一个 id 的数据
您需要确保table1的ID列是一个标识列,然后执行以下操作:
DECLARE @ID INT
INSERT table1 ([columns])
VALUES (...)
SELECT @ID = SCOPE_IDENTITY()
INSERT table2 (table1ID, [columns])
VALUES (@ID, ...)
您可以阅读更多关于 SCOPE_IDENTITY() here。
MAX(ID)
将包括由其他进程创建的 ID 值,这就是您的第二个插入混淆数据的原因。
这是我的table结构
当我将数据插入第一个 table 时,它将在 table 2 中有多个条目 我正在使用代码 获取 ID
Select MAX(ID)+1 From Table1
插入数据
Insert Into Table1 Values('1','abc','add1');
Insert into table2 values('1','med','english');
Insert into table2 values('1','eng','english');
代码在单台计算机上运行良好,但是当我们在多个终端的应用程序中使用时,它插入了错误的数据,即 table2
中另一个 id 的数据您需要确保table1的ID列是一个标识列,然后执行以下操作:
DECLARE @ID INT
INSERT table1 ([columns])
VALUES (...)
SELECT @ID = SCOPE_IDENTITY()
INSERT table2 (table1ID, [columns])
VALUES (@ID, ...)
您可以阅读更多关于 SCOPE_IDENTITY() here。
MAX(ID)
将包括由其他进程创建的 ID 值,这就是您的第二个插入混淆数据的原因。