存储过程-临时表问题

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',因为它在系统目录中不存在。
这个怎么解决?
...全文
315 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
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 掉

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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