存储过程-临时表问题

casoon 2005-08-13 10:28:49
CREATE PROCEDURE dayRank
@middleid nvarchar(4)

AS
declare @condition nvarchar(100)
select @condition=''
if @middleid!=''
select @condition=@condition+' and middleid='+@middleid


select @condition='where datediff(d,regdate,getdate())<=0 '+@condition
print @condition
exec('select counts=(count(*)) ,worknum=worknum into #mm from view_mobile_list '+@condition+' group by worknum')
exec('select id=identity(int,1,1),worknum=worknum,selladdress=selladdress,regdate=regdate,middleid=middleid,middletype=middletype into #day_mobile from view_mobile_list ss where
(not

EXISTS(select worknum from view_mobile_list where id>ss.id and worknum=ss.worknum))')


exec('select top 8 #day_mobile.*,#mm.counts from #day_mobile join #mm on #day_mobile.worknum=#mm.worknum order by #mm.counts desc')
drop table #day_mobile
drop table #mm
GO

执行的时候出错,提示:
服务器: 消息 208,级别 16,状态 1,行 1
对象名 '#day_mobile' 无效。
服务器: 消息 208,级别 16,状态 1,行 1
对象名 '#mm' 无效。
服务器: 消息 3701,级别 11,状态 5,行 1
无法 除去 表 '#day_mobile',因为它在系统目录中不存在。
服务器: 消息 3701,级别 11,状态 5,行 1
无法 除去 表 '#mm',因为它在系统目录中不存在。
这个怎么解决?
...全文
288 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
520zyb 2005-08-13
就是直接在前面再+#
回复
hlq8210 2005-08-13
exec('select top 8 #day_mobile.*,#mm.counts from #day_mobile join #mm on #day_mobile.worknum=#mm.worknum order by #mm.counts desc')
-------------------------------------------------------------
上面执行完以后临时表已经自动消失了。。。
不过避免程序出问题在删除表的时候这样写

if object_id('表名')is not null dorp table 表名

----------------------------------
你程序只要去掉以下两句就好了
drop table #day_mobile
drop table #mm

回复
casoon 2005-08-13
520zyb(欲穷千里目,更上一层楼) ,能不能帮我修改下整个语句!
回复
casoon 2005-08-13
就是再加一#号?
回复
520zyb 2005-08-13
临时表#只能当前工作区内有效,只能在一个exec()语句中才能用
建议用全局临时表##,用完后Drop 掉
回复
相关推荐
发帖
应用实例
创建于2007-09-28

2.7w+

社区成员

MS-SQL Server 应用实例
申请成为版主
帖子事件
创建了帖子
2005-08-13 10:28
社区公告
暂无公告