SQL多个命令

时间:2013-04-16 20:11:17

标签: sql atomic

我在C#中编写一个方法,它执行多个SQL命令并返回一个布尔值,用于确定插入是否成功。我的问题是我想将此命令作为“全有或全无”命令执行。这意味着如果我想执行3个不同的命令并且第三个命令未正确执行,则不会提交前两个命令的更改。我怎么能在SQLServer中做到这一点?

2 个答案:

答案 0 :(得分:1)

如果要执行C#中的三个命令:

SqlTransaction tran = connection.BeginTransaction();
try
{
   ...exec first command and get result...
   ...exec second commmand and get result...
   ...exec third command and get result...
   if (!firstResult || !secondResult || !thirdResult)
      throw new Exception();

   tran.Commit();
}
catch
{
   tran.Rollback();
}

如果要通过调用存储过程在SQL Server中执行这三个命令,请使用:

BEGIN TRANSACTION

cmd1
cmd2
cmd3

IF @Success = 1 THEN
  COMMIT TRANSATION
ELSE
  ROLLBACK TRANSACTION

您还可以在SQL中使用try..catch块来捕获异常并在发生错误时回滚事务。

答案 1 :(得分:0)

您正在搜索一个事务,它将许多SQL查询(通常是INSERTS,UPDATES或DELETES)组合到一个工作单元中,您应该使用BEGIN TRAN(在开头)和COMMIT TRAN(最后)包围您的查询)。 SQL server transaction