SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO
/***********************************************
得到单据的内部单号 
日期:2002.06.10
***********************************************/
ALTER       PROCEDURE pGetInNumber 
                 @BillType nvarchar(50),  --单据类型
                 @InNumber int output --返回的内部单号
AS
begindeclare @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
   endSet @InNumber=@NowNo
Goto SucceedFailed:
  RaisError(@ErrorMsg,16,1)
  Rollback Tran  
  Set NoCount Off
  Return 1Succeed:
  Commit Tran
  Set NoCount Off
  Return 0end
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;
软件在使用的时候,时不是会跳出"新增单据失败!已超过了锁请求超时时段。"的提示信息。