急,执行一个存储过程时,老是提示:已超过了锁请求超时时段!有代码
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
/***********************************************
得到单据的内部单号
日期:2002.06.10
***********************************************/
ALTER PROCEDURE pGetInNumber
@BillType nvarchar(50), --单据类型
@InNumber int output --返回的内部单号
AS
begin
declare @NowNO int
declare @ErrorMsg nvarchar(200)
Set NoCount On
Begin Tran
--设定延时
SET LOCK_TIMEOUT 10000
--取当前序号
Select @NowNO=fInNumber from tBillType with(xLock) where fBillName=@BillType
if @@Error<>0
begin
Set @ErrorMsg='数据被锁定,请求超时!'
Goto Failed
end
Set @NowNo=@NowNo+1
--更新当前序列号
update tBillType set fInNumber=@NowNO where fBillName=@BillType
if @@Error<>0
begin
Set @ErrorMsg='更新内部序列号失败!'
Goto Failed
end
Set @InNumber=@NowNo
Goto Succeed
Failed:
RaisError(@ErrorMsg,16,1)
Rollback Tran
Set NoCount Off
Return 1
Succeed:
Commit Tran
Set NoCount Off
Return 0
end
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
Delphi 用ado+sql 2000开发的两层。
新增单据时。我有插入事件这样子写。
procedure TfrmWsBillBase.QMasterAfterInsert(DataSet: TDataSet);
begin
inherited;
//取内部单号ID
try
with spGetInNumber do
begin
parameters.ParamValues['@BillType'] := VoucherTableName;
Execproc;
end;
except
on E: Exception do
begin
MessageDlg('新增单据失败!' + #13#10 + E.Message, mterror, [mbOk], 0);
Abort;
end;
end;
end;
软件在使用的时候,时不是会跳出"新增单据失败!已超过了锁请求超时时段。"的提示信息。