【问题标题】:sql server - locking existing records in a transactionsql server - 锁定事务中的现有记录
【发布时间】:2015-06-16 20:41:53
【问题描述】:

我有一个带有 xml 参数的存储过程。为简单起见,假设 xml 代表汽车的集合。集合中的每个元素都代表一辆汽车,并具有诸如识别号和制造商之类的详细信息。存储过程的目标是将数据插入数据库。数据库模式已标准化,因此有一个制造商表和一个汽车表。许多汽车可以有相同的制造商。

架构如下所示:

在处理 xml 时,我需要插入 xml 中列出的不在数据库中的制造商,然后插入 xml 中列出的不在数据库中的汽车。

  1. 将唯一的制造商从 xml 插入到 Manufactures 表中
  2. 将记录从 xml 插入到 cars 表中,加入到制造商名称上的制造表中,以获得适当的制造商 ID。

在第 1 步和第 2 步之间,用户或某些其他进程可能会删除制造记录,这样即使我插入了制造记录,或者我需要的制造记录已经存在,当我开始插入汽车记录时所需的制造记录不再存在。

如何防止这种情况发生?我可以在一个事务中完成这一切,这将锁定我插入的制造商记录直到提交,但我如何才能锁定我需要的已经存在的记录?

【问题讨论】:

标签: sql-server sql-server-2008 transactions


【解决方案1】:

如果你使用 sql 事务,这真的很简单。

伪代码:

BEGIN TRANSACTION

INSERT Manufacturers

INSERT Cars

COMMIT TRANSACTION

在您的事务完成(提交或回滚)之前,无法删除从此流程中插入的制造商行。

【讨论】:

  • 是的,但是如果制造表中已经有记录,我不会插入,所以记录不会被锁定。我需要插入汽车,我将参考现有的制造商记录。
猜你喜欢
  • 2019-06-30
  • 2011-02-08
  • 1970-01-01
  • 1970-01-01
  • 2016-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-16
相关资源
最近更新 更多