日期:2014-05-18  浏览次数:20439 次

存储过程中创建临时表的问题????

  我在存储过程中创建临时表 且用于下次查询,代码如下:
   
  ALTER PROCEDURE dbo.selectDepAndUser
(
@DepID int,
@UserID int
)
AS
select DepID,DepName,DepNumClass into #DepB_temp from DepB where DepNumClass=@DepID


SELECT UserB.UserID, UserB.UserInfoName, UserB.UserName, UserB.DepID,#DepB_temp.DepID,
  #DepB_temp.DepName,#DepB_temp.DepNumClass
FROM #DepB_temp INNER JOIN
  UserB ON #DepB_temp.DepID = UserB.DepID 


RETURN 


  程序运行结果 为: 运行dbo."selectDepAndUser" ( @DepID = 2, @UserID = 24 ).

  存储过程为改为:

  select DepID,DepName,DepNumClass into #DepB_temp from DepB where DepNumClass=@DepID
   
  select * from #DepB_temp

  后输出结果一样。
   
  请问我的临时表是不是创建有问题。请各位帮帮看看

------解决方案--------------------
select DepID,DepName,DepNumClass into #DepB_temp from DepB where DepNumClass=@DepID 

临时表的作用域只在过程中,过程结束,临时表销毁,考虑用表吧
------解决方案--------------------
存储过程没问题,你好象是调用存储过程写的不对。
你直接selectDepAndUser 1,3 执行
------解决方案--------------------
直接查询基本表有数据吗,加上你的条件?
------解决方案--------------------
SQL code

疯子, 这个临时表不是在动态语句中创建的。作用域还在。。。
不信你可以试试:
create proc wsl
as
select * into # from aaa
select * from #

然后调用该存储过程绝对没错。。。


另楼主,你的存储过程应该没什么问题,应该是你调用错了。。
正确调用:
exec selectDepAndUser @DepID=2,@UserID = 24  
--或者:
exec selectDepAndUser 2,24

切勿:
exec selectDepAndUser (@DepID=2,@UserID = 24)

------解决方案--------------------
呵呵,我还以为她又查一遍呢
听楼主说是为了下次查询,那应该就是想调用第一次过程后,
调用第二次过程,然后临时表就是2条记录(比如没次一条)
----------------------
如果是想查为什么临时表为空,该是insert into 后面select语句没岔道数据
------解决方案--------------------
select DepID,DepName,DepNumClass from DepB where DepNumClass=2有数据?
------解决方案--------------------
临时表用完以后要删了啊
------解决方案--------------------

TO楼主,你的存储过程没问题。没有返回结果。可以把你最后的return去掉试一下。。。
另外调试下,看是否本来就没有符合条件的数据。。。
------解决方案--------------------
用完后:drop table #DepB_temp

另外,内存表是有时间的,不会一直占驻,时间久了数据就没了。
------解决方案--------------------
楼主表达的实在不清楚,
过程还return干什么啊?
------解决方案--------------------
SQL code
select UserB.UserID,   UserB.UserInfoName,UserB.UserName,UserB.DepID,
DepB.DepID, DepB.DepName,DepB.DepNumClass
from DepB inner join userb on DepB.DepID=UserB.DepID
where  DepB.DepNumClass=@DepID