Sql Server Transaction无法正常工作

时间:2015-11-11 17:19:56

标签: sql-server

我的Sql Server(2008 R2)存在很大问题。 在一个数据库中,我有3个表,例如Tmp_table和T_Dest1和T_Dest2 我有3个程序可以使用这个3表

procedure Main()
Begin

  Declare @Res_Two int, @Res_Tree Int;

  Begin Transaction T_One;
    do heavy work;
    exec @Res_Two = two;--Call Procedure Two
    if @Res_Two = -1 
    Begin
      GoTo RB;
    End;

    do heavy work;
    exec @Res_Three = Three;--Call Procedure Tree
    if @Res_Three = -1 
    Begin
      GoTo RB;
    End;

    Delete From Tmp_table;

    if @@ERROR > 0
    Begin
    RB:
      Rollback Tran T_One;
      Return (-1);
    End Else Begin
      Commit Tran T_One;
      Return (1);
    End;
End;

End;

Procedure Two;
Begin
  insert into T_Dest1 Select * from tmp_table ;
  if @@ERROR > 0 Goto Rb;

  if @@ERROR > 0 
  Begin
  RB: 
   Return (-1);
  End Else Begin
   Return (1);
  End
End;

Procedure Three;
Begin
  insert into T_Dest2 Select * from tmp_table ;
  if @@ERROR > 0 Goto Rb;

  if @@ERROR > 0 
  Begin
  RB: 
    Return (-1);
  End Else Begin
    Return (1);
  End

End;

所有事情都没问题,但突然当用户从T_Dest1中的tmp_table副本调用Main Proc数据但是没有在T_Dest2中复制而Main proc返回1表示每件事情都没问题; (这种状态可能在一天中发生一两次)。

我的数据库中的错误是什么?我的错误是什么? 这种方式我从交易中使用是正确的吗? 我可以找到Tmp_Table和Main Proc失去的数据何时无法正常工作? 当我的服务器非常繁忙并且许多用户一起使用数据库时,我认为这是错误的。

1 个答案:

答案 0 :(得分:1)

这是一些使用try / catch而不是GOTO的伪代码。

var example = 'hello';

var charRepeats = function(str) {
    for (var i=0; i<str.length; i++) {
      if ( str.indexOf(str[i]) !== str.lastIndexOf(str[i]) ) {
        return false; // repeats
      }
    }
  return true;
}

console.log( charRepeats(example) ); // 'false', because when it hits 'l', the indexOf and lastIndexOf are not the same.