关于存储过程,该如何解决

关于存储过程表tbbom2IDprodnofnocnonumlvl12HY50-7HY50-7HY50-71.0000013HY50-71200100100341.0000114HY5

关于存储过程
表tbbom2
ID               prodno       fno               cno                             num               lvl
12HY50-7HY50-7HY50-7                   1.00000
13HY50-71200100100341.00001
14HY50-71200100100351.00001
45QKS18QKS18QKS18                   1.00000
46QKS184500100100341.00001
47QKS184500100100352.00001
48QKS184500100100363.00001
49QKS184500100100374.00001
50QKS184500100100385.00001
51QKS184500100100396.00001
320209-3-20209-3-20209-3-2                   1.00000
53QKS184500100100418.00001
表tmp_bom2
ID               prodno       fno             cno                                 num             lvl
46QKS184500100100341.00001
47QKS184500100100352.00001
48QKS184500100100363.00001
49QKS184500100100374.00001
50QKS184500100100385.00001
53QKS184500100100418.00001

存储过程:updatetbbom2
CREATE   PROCEDURE   updatetbbom2
@prodno     varchar,
@tmplvl   numeric(18,0)
  AS

delete   from   tbbom2   where   prodno=@prodno   and   fno+cno+cast(lvl   as   varchar(50))   not   in
  (select   fno+cno+cast(lvl   as   varchar(50))   from   tmp_bom2)     and   lvl=@tmplvl

update   tbbom2   set   fno=tmp_bom2.fno,
cno=tmp_bom2.cno,num=tmp_bom2.num,bz=tmp_bom2.bz  
from   tmp_bom2   where   tbbom2.fno=tmp_bom2.fno   and   tbbom2.cno=tmp_bom2.cno   and   tbbom2.lvl=tmp_bom2.lvl

insert   into   tbbom2  
(prodno,fno,cno,num,lvl,bz)  
select   prodno,fno,cno,num,lvl,bz   from   tmp_bom2  
where   fno+cno+cast(lvl   as   varchar(10))   not   in  
(select   fno+cno+cast(lvl   as   varchar(10))   from   tbbom2)

我在查询分析器中执行:
exec   updatetbbom2   'QKS18 ',1
返回结果

(所影响的行数为   0   行)

(所影响的行数为   6   行)

(所影响的行数为   0   行)
直接执行:select   *   from   tbbom2   where   prodno= 'QKS18 '   and   fno+cno+cast(lvl   as   varchar(50))   not   in
  (select   fno+cno+cast(lvl   as   varchar(50))   from   tmp_bom2)     and   lvl=1
返回一行数据!不得其解还请前辈们帮忙!

[解决办法]
把你的
delete from tbbom2 where prodno=@prodno and fno+cno+cast(lvl as varchar(50)) not in
(select fno+cno+cast(lvl as varchar(50)) from tmp_bom2) and lvl=@tmplvl
写到字符串变量里 然后打印出来
看看跟你写的有什么不同