我的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失去的数据何时无法正常工作? 当我的服务器非常繁忙并且许多用户一起使用数据库时,我认为这是错误的。
答案 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.