0

在我的应用程序中,我有一个表单,我必须在单击一个按钮时执行多个数据库事务,即当我单击按钮时

查询 1 >>> 将指定值插入指定表

查询2.>>选择查询以获取最后输入的名称的主键....即上述插入查询插入的自动编号

query 3 >> inset data into another table with the primary key recvd from above

查询 4 ​​.>> 用上面的主键更新另一个表

如果任何查询失败或发生任何异常其他人不应该工作

现在我正在尝试使用 try catch 并在发生异常时删除 prevoius 插入来做到这一点......

我是 sql server 2008 的新手,有什么好的想法吗

4

1 回答 1

1

正如其他人评论的那样,将所有这些操作包装到一个事务中,而不是为每个事务使用单独的事务。事务的ACID属性的“原子性”部分将确保所有操作或不成功,并且您永远不会有部分结果。

如果您使用的是 ADO.NET,您将为此使用BeginTransactionCommit

顺便说一句,您不应该执行步骤 2 - 如果并发客户端在您的步骤 1 之后但在您有机会执行步骤 2 之前插入一行(并提交)怎么办?你会得到错误的PK。最好直接获取第一步生成的PK。

于 2012-09-10T11:50:56.480 回答