【问题标题】:How to Lock multiple tables for Insert command in Sql如何在 Sql 中为插入命令锁定多个表
【发布时间】:2017-07-24 07:46:46
【问题描述】:

这是我的表格结构

当我在第一个表中插入数据时,表 2 中会有多个条目 我正在使用代码 获取身份证

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 的数据

【问题讨论】:

  • 不要在桌子上使用MAX(ID)+1 而不是使用identity(1,1)
  • 当局域网数据中使用的应用程序与另一个条目混合时,我的问题不是第一个表而是第二个表

标签: sql sql-server database vb.net client-server


【解决方案1】:

您需要确保 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 值,这就是您的第二次插入混淆数据的原因。

【讨论】:

  • 如果 SCOPE_IDENTITY() 从同一范围调用,这将起作用。如果不是,则应使用 @@IDENTITY。
  • 您需要小心@@IDENTITY,因为触发器插入的值会干扰其值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-18
  • 1970-01-01
  • 1970-01-01
  • 2015-08-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多