日期:2014-05-19  浏览次数:20375 次

紧急求助一个郁闷的问题
我的SQL语句如下:
SELECT   *   INTO   #Temp_ViewReport067   FROM   (SELECT   SupTitle,QC=(SELECT   ISNULL(SUM(Due),0)   FROM   QC_Due_200705   WHERE   SysId=A.SysId)+(SELECT   ISNULL(SUM(CASE   BusCls   WHEN   '0001 '   THEN   BusMoney-BusAgio   WHEN   '0002 '   THEN   -(BusMoney-BusAgio)   ELSE   0   END),0)+ISNULL(SUM(CASE   BusPayType   WHEN   '0001 '   THEN   -BusMoneyS   WHEN   '0002 '   THEN   -BusMoneyS   ELSE   0   END),0)   From   Jxc_Business_200705   WHERE   (BusRmentType= '0000 '   OR   BusRmentType= '0001 ')   AND   BusDate < '2007-5-10 '   AND   BusCS=A.SysId   AND   BusCls   IN   ( '0001 ', '0002 ', '0013 ')),BQZ=(SELECT   ISNULL(SUM(CASE   BusCls   WHEN   '0001 '   THEN   BusMoney-BusAgio   WHEN   '0002 '   THEN   -(BusMoney-BusAgio)   ELSE   0   END),0)+ISNULL(SUM(CASE   BusPayType   WHEN   '0003 '   THEN   -BusMoneyS   WHEN   '0004 '   THEN   BusMoneyS   ELSE   0   END),0)   From   Jxc_Business_200705   WHERE   (BusRmentType= '0000 '   OR   BusRmentType= '0001 ')   AND   BusDate> = '2007-5-10 '   AND   BusDate <= '2007-5-31 '   AND   BusCS=A.SysId   AND   BusCls   IN   ( '0001 ', '0002 ', '0013 ')),BQF=(SELECT   ISNULL(SUM(CASE   BusPayType   WHEN   '0001 '   THEN   BusMoneyS   WHEN   '0002 '   THEN   BusMoneyS   ELSE   0   END),0)   From   Jxc_Business_200705   WHERE   (BusRmentType= '0000 '   OR   BusRmentType= '0001 ')   AND   BusDate> = '2007-5-10 '   AND   BusDate <= '2007-5-31 '   AND   BusCS=A.SysId   AND   BusCls   IN   ( '0001 ', '0002 ', '0013 '))FROM   Jxc_Supplier   A)   T

这句SQL在查询分析器里面执行很正常,但是放在程序里却总是提示“数据库中已存在名为   '#Temp_ViewReport067 '   的对象。”,真是郁闷,我可以绝对保证执行语句前不存在#Temp_ViewReport067这个对象!!!

------解决方案--------------------
在执行这条语句前加 drop table #Temp_ViewReport067 不报错,你才能绝对保证
------解决方案--------------------
局部临时表在当前连接有效,如果连接关闭,会自动销毁局部临时表。

如果在一个连接中多次执行,必须在每次执行后,手动销毁此临时表,以避免在当前连接中再次创建临时表时,提示已经存在。
------解决方案--------------------
一楼所说的有点儿问题,如:对于第一次执行时,没有此临时表,drop会出错。

最好是每次创建后,手工drop掉。
------解决方案--------------------
select *
into #t
from 表名


drop table #t


这种用法没有问题。