首页 新闻 搜索 专区 学院

这个存储过程的错误怎么改

0
[已解决问题] 解决于 2012-09-12 08:23
create procedure C
as
if(exists(select name from tempdb..sysobjects where name like'%A%' and type='U'))
begin
drop table #A
end

SELECT * INTO #A  FROM tbTriopticsRowDataHistory

delete from #A
 where operator like '%10CM%' and matchtype<>'T'

delete from #A
 where operator not like '%10CM%' and matchtype<>'M'

消息 3701,级别 11,状态 5,过程 C,第 5 行 无法对 表'#A' 执行 删除,因为它不存在,或者您没有所需的权限。

(68677 行受影响)

(0 行受影响)

(0 行受影响)

(1 行受影响)

Sureboy的主页 Sureboy | 菜鸟二级 | 园豆:212
提问于:2012-09-11 09:06
< >
分享
最佳答案
1

你看一下你的if(exists(select name from tempdb..sysobjects where name like'%A%' and type='U')),这句是现在数据库中查询一下有没有对象名中带"A"的,有的话删掉,但是你删的时候删的是#A这个对象,你就这么确定一定存在这么一个对象?两个解决办法,确定就是要删除这个表的话,就改成这样if(exists(select name from tempdb..sysobjects where name ='#A' and type='U')),不确定的话就先查询出对象名,存放在变量中,再去删除。

奖励园豆:5
轻狂の书生 | 小虾三级 |园豆:1040 | 2012-09-11 09:23
其他回答(1)
1

%A% 不代表#A,它可能是#ATR之内的,所以你的判断有问题,if(OBJECT_ID('tempdb..#t1') is not null)
 drop table #t1 这样试试

程序员的人生 | 园豆:235 (菜鸟二级) | 2012-09-11 18:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册