100~~~~~~`关于BOM表新增检查的问题!~~急!!!请高手帮忙指点啊!!!

michaeljian 2005-07-05 05:48:04
tbl_bom表结构如下:
ID Materialcode Parentcode
1 A B
2 A C
3 B D
......
在新增记录时,我想检查新增的内容是否会造成现有的数据库中结构循环,我的做法如下,遇到层次少的记录可以调用如下的代码,但是遇到6层以上的结构就会出现超IIS时间,无法新增数据了,请高手帮帮我啊!谢谢!!急!

<%
Function BomLoopFlag(Child,Flag,MaterialCode)
dim strsql
dim rstemp,rsbom
strsql="select Parentcode from tbl_bom where materialcode='" &child & "'"
if openconnection(strsql,rsbom,3) then
do while not rsbom.eof
if MaterialCode=rsbom("Parentcode") then
Flag=false
end if
call BomLoopFlag(rsbom("ParentCode"),Flag,MaterialCode)
rsbom.movenext
loop
end if
BomLoopFlag=Flag
end Function

ParentCode=formatstr(Request.Form("txtcParentCode"),ftsql)
MaterialCode=formatstr(Request.Form("txtcMaterialCode"),ftsql)

if not BomLoopFlag(ParentCode,1,MaterialCode) then
Response.Write "<script language=javascript>alert('所添加的物料会造成循环使用,请返回重试!');history.back()</script>"
Response.End
end if
%>
...全文
176 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
smilingstabber 2005-09-21
  • 打赏
  • 举报
回复
也碰到这个问题

在数据少,确保数据都还正确的情况下,能够顺利的进行检查。

但挂上原来旧的数据库,有52万多条数据,并且不保证数据都是全部正确的情况下,一运行检查就超时,用的是一个类似 libin_ftsafe(子陌红尘) 提的方案。

期待高人出手.......
michaeljian 2005-07-06
  • 打赏
  • 举报
回复
Server: Msg 137, Level 15, State 2, Procedure sp_check, Line 32
Must declare the variable '@'.

编译还是出错,老大~~~帮个忙再看看~~谢谢啊~
子陌红尘 2005-07-06
  • 打赏
  • 举报
回复
赋值时漏了set关键字:

create procedure sp_check(@Child varchar(20),@MaterialCode varchar(20),@ret int output)
as
begin
declare @i int
set @i = 0

if not exists(select 1 from tbl_bom where materialcode=@Child)
begin
select
@i as level,Parentcode
into
#t
from
tbl_bom
where
materialcode=@Child
end
else
begin
set @ret = 1
return
end


while @@rowcount<>0
begin
if not exists(select 1 from tbl_bom a,#t b where a.materialcode=b.Parentcode and b.level=@i)
begin
insert into
#t
select
@+1,a.Parentcode
from
tbl_bom a,#t b
where
a.materialcode=b.Parentcode and b.level=@i

set @i = @i + 1
end
begin
set @ret = 1
return
end
end

set @ret = 0
return
end
michaeljian 2005-07-06
  • 打赏
  • 举报
回复
在线等,急啊,谢谢!
michaeljian 2005-07-06
  • 打赏
  • 举报
回复
谢谢楼上的高手啊,不过好象在企业管理器中新增你的存储过程有语法检查不通过,在asp中怎么调用你的这段存储过程呢,谢谢啊!
子陌红尘 2005-07-06
  • 打赏
  • 举报
回复
create procedure sp_check(@Child varchar(20),@MaterialCode varchar(20),@ret int output)
as
begin
declare @i int
set @i = 0

if not exists(select 1 from tbl_bom where materialcode=@Child)
begin
select
@i as level,Parentcode
into
#t
from
tbl_bom
where
materialcode=@Child
end
else
begin
@ret = 1
return
end


while @@rowcount<>0
begin
if not exists(select 1 from tbl_bom a,#t b where a.materialcode=b.Parentcode and b.level=@i)
begin
insert into
#t
select
@+1,a.Parentcode
from
tbl_bom a,#t b
where
a.materialcode=b.Parentcode and b.level=@i

set @i = @i + 1
end
begin
@ret = 1
return
end
end

@ret = 0
return
end
michaeljian 2005-07-06
  • 打赏
  • 举报
回复
恳请大家帮帮忙,在线急等,如果嫌分不够还可以再加
michaeljian 2005-07-06
  • 打赏
  • 举报
回复
请高手帮忙啊~~急~~谢谢!
michaeljian 2005-07-06
  • 打赏
  • 举报
回复
楼上的高手请问具体怎么实现呢?谢谢啊!
子陌红尘 2005-07-06
  • 打赏
  • 举报
回复
这个功能封装到数据库服务器端的存储过程中恐怕要合适得多,数据库服务器与应用程序之间多次的中间数据交互太浪费资源。
michaeljian 2005-07-06
  • 打赏
  • 举报
回复
请问超时时间具体怎么能设呢?
631799 2005-07-06
  • 打赏
  • 举报
回复
超时时间设长一点
michaeljian 2005-07-06
  • 打赏
  • 举报
回复
高手救命啊
michaeljian 2005-07-06
  • 打赏
  • 举报
回复
UP

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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