1.你创建的是局部临时表,不管你是否使用了drop table #Flight
  在存储过程结束后,都会被自动删除2.你创建的是局部临时表,所以只能在创建它的过程 dbo.GetFlights 中有效,其他过程是访问不了的3.你可以这样改存储过程(用全局的临时表):
CREATE PROCEDURE dbo.GetFlights AS
create table ##Flight (Type nvarchar(8),Flight nvarchar(18))bulk insert  ##Flight from 'c:\flight.txt'
with(FIELDTERMINATOR=',')
select  *  from  ##Flight
GO

解决方案 »

  1.   

    是啊,被 drop table  #FlightCREATE PROCEDURE dbo.GetFlights AS
    create table ##Flight (Type nvarchar(8),Flight nvarchar(18))bulk insert  ##Flight from 'c:\flight.txt'
    with(FIELDTERMINATOR=',')
    select  *  from  #Flight
    select distinct type from ##flight
    drop table  ##Flight
    GO
    然后,
      

  2.   

    因为'c:\flight.txt'是经常变动的,所以我执行完dbo.GetFlights后,我要删除这个临时表,
    这样一来,从临时表从取数据还是一个问题.
      

  3.   

    想到了一个办法,写一条语句判定##Flight是否存在,就是不知道这个怎么写?
      

  4.   

    CREATE PROCEDURE dbo.GetFlights AS
    begin
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].##Flight') and OBJECTPROPERTY(id, N'IsTable') = 1)
    drop table [dbo].##Flightcreate table ##Flight (Type nvarchar(8),Flight nvarchar(18))bulk insert  ##Flight from 'c:\flight.txt'
    with(FIELDTERMINATOR=',')
    select  *  from  ##Flight
    end
    GO
      

  5.   

    可是很奇怪,我执行完这个存储过程后,从新执行这条语名,提示:数据库中已存在名为 '##Flight' 的对象。难道if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].##Flight') and OBJECTPROPERTY(id, N'IsTable') = 1)
    drop table [dbo].##Flight
    没有被执行.哪位高手说说是什么原因,应该怎样写这个存储过程?
      

  6.   

    --改成
    if exists (select * from tempdb.dbo.sysobjects where name='##Flight' and xtype='u')
    drop table [dbo].##Flight
      

  7.   

    谢谢,为什么后面可以,前面不行?OBJECTPROPERTY(id, N'IsTable') = 1和xtype='u'有什么区别?