TechWeb-技术社区 » 程序开发 » .NET » 存储过程中创建临时表的问题????


2008-2-25 15:41 生活周刊
存储过程中创建临时表的问题????

我在存储过程中创建临时表   且用于下次查询,代码如下: NaU/P1NI+x
            
]h#P1ANkm[                 ALTER   PROCEDURE   dbo.selectDepAndUser jI(N dMpo
( "|7lJ^`
@DepID   int, 4HQQiDC!k
@UserID   int v"R#ee,H5}0A
) (|[9nSN|9O"h4A
AS
5N/u3m l.w|1r   select   DepID,DepName,DepNumClass   into   #DepB_temp   from   DepB   where   DepNumClass=@DepID
\$IRT3R .s.U/D.s;^hLwU

O%k#^.i*\,TBX   SELECT   UserB.UserID,   UserB.UserInfoName,   UserB.UserName,   UserB.DepID,#DepB_temp.DepID,
P;EbRqX a p+B%I           #DepB_temp.DepName,#DepB_temp.DepNumClass 8fx9Z}W|\M^r
FROM   #DepB_temp   INNER   JOIN \iR#~4S0d
            UserB   ON   #DepB_temp.DepID   =   UserB.DepID   
%u*` Xm'M;oy&? L:ps G~,o _!N{,r\

UCTW L1\2b RETURN   $p'T`L5`c5I/U
F Au:Z-a&e`-aY
Ho$}:U!t
      程序运行结果   为:     运行dbo."selectDepAndUser"   (   @DepID   =   2,   @UserID   =   24   ). I I$G*CrX}+J
R c_a7B8zV
                存储过程为改为:
-xw#]q_h
So6g6T~T,t                     select   DepID,DepName,DepNumClass   into   #DepB_temp   from   DepB   where   DepNumClass=@DepID "m2d9T|O
                  
| P l-o s+K                   select   *   from   #DepB_temp
Y0r ig#r
M:EtOnT5X5fv%?           后输出结果一样。 N1^R0S2v6q-H*d
      
%V+tn8@-X8NS           请问我的临时表是不是创建有问题。请各位帮帮看看

2008-3-13 14:36
select   DepID,DepName,DepNumClass   into   #DepB_temp   from   DepB   where   DepNumClass=@DepID  
8zb$g+i{ 5o7]&T.l!qwN
临时表的作用域只在过程中,过程结束,临时表销毁,考虑用表吧

2008-3-13 14:36
存储过程没问题,你好象是调用存储过程写的不对。 &~%W|#P"|!r5f's3YW d/I
你直接selectDepAndUser 1,3 执行

2008-3-13 14:36
运行后感觉好像 临时表中没有数据的样子 。请教是什么问题??

2008-3-13 14:36
直接查询基本表有数据吗,加上你的条件?

2008-3-13 14:36
确定有数据吗?:DDDDD

2008-3-13 14:37
SQL code
Q"z3W)^IX.] 疯子, 这个临时表不是在动态语句中创建的。作用域还在。。。Qi(v:vl
不信你可以试试:-rS(IPv@1|*h
create proc wsl
/AW __"D H C as].jizX;c f-We
select * into # from aaa0k] f$B:Lu(e1k+{
select * from #T8m+W ^Kiy
:hC#\(Oa[V j
然后调用该存储过程绝对没错。。。"j"^"k_!sl

g-ZOHoec _8Q*E!A1h!\%Y:r r f
另楼主,你的存储过程应该没什么问题,应该是你调用错了。。
8]If'~k)J X4tb 正确调用:
-hg`&H%K W0_/{ exec selectDepAndUser @DepID=2,@UserID = 24  
#YgL j/iETG --或者:*U8nAR#cQir
exec selectDepAndUser 2,24YV,AC.V
%gI bds4h'C(wOh
切勿:
WC:A~5\2K FObF exec selectDepAndUser (@DepID=2,@UserID = 24)

2008-3-13 14:37
确定有数据的 !只是用临时表后就没有了

2008-3-13 14:37
我不太明白你的意思,如这个存储过程:
OQtB;C5k i9oq          ALTER   PROCEDURE   dbo.selectDepAndUser   I"@#v*De J1}`
(  
x_.dadmg"x @DepID   int,  ;E6~ T? G%D5_5v8?
@UserID   int  
1r3zV"| hf#{ )  :iYVNU R;G0xr
AS  V#x;Q!} {Z0r
  select   DepID,DepName,DepNumClass   into   #DepB_temp   from   DepB   where   DepNumClass=@DepID  8zF^)zA*}Ak x}
j b$_.| U m
+b(b/X4z N o_"q
  SELECT   UserB.UserID,   UserB.UserInfoName,   UserB.UserName,   UserB.DepID,#DepB_temp.DepID,  /R*G5^Jz
          #DepB_temp.DepName,#DepB_temp.DepNumClass   M-C y ul Q
FROM   #DepB_temp   INNER   JOIN  
't-IL|$v7h4g5}S             UserB   ON   #DepB_temp.DepID   =   UserB.DepID    bh)OB~G

nip#C4\MX mk
O @5ay2t.OQ RETURN   
C7UIO^I /Nf4Rc1T+I![t
  按照您的方法应该如何改正???

2008-3-13 14:37
刚才试了 下   %NNV Yd~,U u
    去掉()后运行结果为::   E3Ie ew7[
   
W1{ELG+H,T0[
$WB5@M*Ow#@ q.W    运行dbo."selectDepAndUser" ( @DepID = 2, @UserID = 24 ).
8G*g!^'Vqr5uL
!B6q"}e+of(w (18 行受影响) a6eL&QE3^'f*b0^
没有行受影响。 yI#Q5md,y(mI?
没有更多的结果。 +Rz7j.zgdH
(返回 0 行)
zC"y'w M @RETURN_VALUE = 0
qu S S3N c 完成 dbo."selectDepAndUser" 运行。

2008-3-13 14:37
呵呵,我还以为她又查一遍呢 jY&D:X$YE
听楼主说是为了下次查询,那应该就是想调用第一次过程后,
\rG`&|i 调用第二次过程,然后临时表就是2条记录(比如没次一条) k+XTudyJ!x
----------------------
-e"Q k-tNr1})z 如果是想查为什么临时表为空,该是insert into 后面select语句没岔道数据

2008-3-13 14:37
select   DepID,DepName,DepNumClass  from   DepB   where   DepNumClass=2有数据?

2008-3-13 14:37
临时表用完以后要删了啊

2008-3-13 14:37
你的存储过程没问题。没有返回结果。可以把你最后的return去掉试一下。。。 O7s7yav QX9Y
另外调试下,看是否本来就没有符合条件的数据。。。

2008-3-13 14:37
按照你的意思去掉了 return。。但是很奇怪 有时候返回有结果 有时候显示运行结果就是 Qn$J|H\H
     
2FJ_W;hL,b3m      运行dbo."selectDepAndUser"   (   @DepID   =   2,   @UserID   =   24   ).  
e5a?4Czi/W&]s QPR
'}-vg |V   是不是临时表的处理方式上面还有点问题??  7pA#Cy%VkC

j]k\ ` G7]{p    我打开了存储过程 ,第一遍运行很正常 也有返回结果, 但是运行第2便时候就没有结果了。关闭存储过程再打开运行也不行,,但是等过了 大约 <一分钟 的样子 ,又可以运行,但第2遍就不行了

2008-3-13 14:37
运行dbo."selectDepAndUser" ( @DepID = 2 ).
b T pe&t 2t nf;o'QD
(18 行受影响)
tgp2u(MB!lY UserID      UserInfoName   UserName         DepID       DepID       DepName   DepNumClass  
uz p.L9ZH/hvAw[ ----------- -------------------------------------------------- -------------------------------------------------- ----------- ----------- -------------------------------------------------- -----------
~t1Umqu6Mz 25          刘斌         lb                   34          34          华东          2   
;I&Cr4q+{ M&ON . 9qCQMD0v
.
*z!dW"|8z X . n&aNQrN p+K*i7r ^
. ie(v%WCW;O
.
)Nu6eK B c"Dc(Q8A .          H2T2T x5k ymw!S
没有更多的结果。 1^M2L;d+h
(返回 18 行)
L;V1D#F_%nQ @RETURN_VALUE = 0 J*[(E0ljGh
完成 dbo."selectDepAndUser" 运行。
/\s-JW {VfX7M[we !u8z1V$@ {F$D O
这是我运行成功后的数据。。  
RPe:y0Mv4K(yCo
)d$k3f m3vg`7{y 但是有很多时候 运行这存储过程却是显示: 4Y/vv0d M/w

r;\Wy]!w   运行dbo."selectDepAndUser"(  @DepID =2, @UserID = 24).

2008-3-13 14:38
用完后:drop table #DepB_temp
(G+[@@)K+sf
/p\X\"`+X 另外,内存表是有时间的,不会一直占驻,时间久了数据就没了。

2008-3-13 14:38
但是我 是重新打开存储过程的再运行的啊?  那样的话应该是我在临时表中重新填入数据的,,应该也会有数据的吧。。

2008-3-13 14:39
楼主表达的实在不清楚, v2Y'Ph*K:wcU8p;?,B
过程还return干什么啊?

2008-3-13 14:40
。。很欣慰啊 。。  0K_(q0wfh\
在项目中运行一切正常 ,, 而且 我加上return 和()都正常。。
,?gq0G+t'{ c\    但是真想知道为什么在存储过程中运行会出现上述的情况??

页: [1] 2


Powered by Discuz! Archiver 5.5.0  © 2001-2006 Comsenz Inc.