sql server - 锁定事务中的现有记录

时间:2015-06-16 20:41:54

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

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

架构如下所示: enter image description here

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

  1. 将xml中的独特制造商插入制表表
  2. 从xml将记录插入cars表,并连接到制造商名称上的制造表,以获取相应的制造商ID。
  3. 在步骤1和步骤2之间,用户或其他进程可能会删除制造记录,因此即使我插入制造记录,或者我已经存在的所需记录,当我插入车记录时所需的制造记录不再存在。

    我该怎样防止这种情况?我可以在一个事务中执行此操作,该事务将锁定我在插入之前插入的制造商记录,但是如何锁定我需要的已存在的记录?

1 个答案:

答案 0 :(得分:0)

如果使用sql事务,这非常简单。

伪代码:

BEGIN TRANSACTION

INSERT Manufacturers

INSERT Cars

COMMIT TRANSACTION

在您的交易完成(提交或回滚)之前,没有任何东西可以删除从此流程插入的制造商行。