急,执行一个存储过程时,老是提示:已超过了锁请求超时时段!有代码

HelpMeNow 2009-10-13 05:53:21
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;


软件在使用的时候,时不是会跳出"新增单据失败!已超过了锁请求超时时段。"的提示信息。
...全文
346 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xcplates 2009-10-30
  • 打赏
  • 举报
回复
更新单号你用触发器不行吗?
我觉得这种情况就是标准使用触发器的情况吧。
lake_cx 2009-10-27
  • 打赏
  • 举报
回复
手工单步跑一下过程,应该是tBillType表死锁了吧
HelpMeNow 2009-10-27
  • 打赏
  • 举报
回复
再顶
HelpMeNow 2009-10-21
  • 打赏
  • 举报
回复
有没有解释一下啊。
HelpMeNow 2009-10-13
  • 打赏
  • 举报
回复
dahai9825 2009-10-13
  • 打赏
  • 举报
回复
应该在哪里阻塞了 你参考下这个
http://topic.csdn.net/t/20030922/10/2285767.html

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧