tempdb数据库中的表:1、表:其实就是普通的表,虽然这个tempdb是临时数据库,但如果是创建的表,那么这个表是一直存在的,但是系统如果重启,那么这个表没有了,为什么呢?因为临时数据库,是每次启动时重新创建的,所以数据库重建,那么原来的表没有了。2.临时表:一般是指局部临时表,就是#名称的,那么这个表在创建的会话中可见,一旦会话结束了,就没有了,另外,也有全局临时表,一旦创建全局临时表的回话退出了,或者其他引用表的会话退出了,那么表就会删除

解决方案 »

  1.   

    1、表是实体表,除非重启或者删除,否则一直存在,临时表在会话结束后就删除。
    2、此外, 还请教一下系统数据库的用处:master、model、msdb、tempdb
    你最好去搜索引擎找,这东西一大片,不想铁
      

  2.   


    多谢酒家, 那请问如何删除临时表DECLARE @tempTable TABLE ( rowNum INT, tableName NVARCHAR(MAX))
    INSERT INTO @tempTable 
    SELECT ROW_NUMBER() OVER (ORDER BY NAME),[name] FROM tempdb.dbo.sysobjects 
    WHERE xtype='U' 
    --AND [name] NOT LIKE '#%'--SELECT * FROM @tempTableDECLARE @i INT,@iMax INT,@sql NVARCHAR(MAX)
    SELECT @i=1,@iMax=COUNT(1) FROM @tempTableWHILE @i<=@iMax
    BEGIN
    SELECT @sql = 'drop table tempdb.dbo.'+ t.tableName FROM @tempTable t WHERE @i=t.rowNum
    EXEC(@sql)
    SET @i=@i+1
    END
    如上会提示:
    无法对 表 '#244EB3FD' 执行 删除,因为它不存在,或者您没有所需的权限。但就没有办法删除么?
      

  3.   

    EXEC后算新的会话,所以临时表不存在了
      

  4.   


    多谢酒家, 那请问如何删除临时表DECLARE @tempTable TABLE ( rowNum INT, tableName NVARCHAR(MAX))
    INSERT INTO @tempTable 
    SELECT ROW_NUMBER() OVER (ORDER BY NAME),[name] FROM tempdb.dbo.sysobjects 
    WHERE xtype='U' 
    --AND [name] NOT LIKE '#%'--SELECT * FROM @tempTableDECLARE @i INT,@iMax INT,@sql NVARCHAR(MAX)
    SELECT @i=1,@iMax=COUNT(1) FROM @tempTableWHILE @i<=@iMax
    BEGIN
    SELECT @sql = 'drop table tempdb.dbo.'+ t.tableName FROM @tempTable t WHERE @i=t.rowNum
    EXEC(@sql)
    SET @i=@i+1
    END
    如上会提示:
    无法对 表 '#244EB3FD' 执行 删除,因为它不存在,或者您没有所需的权限。但就没有办法删除么?这个一般只能是在创建这个临时表的会话来删除的
      

  5.   

    其实我也知道这个只存在于会话(某次连接)之中,但我想知道有无其它办法可删除, 当然, 实在无法删除就算了。主要是数据库在没有怎么使用的情况下, 还是有很多临时表无法删除, 觉得不可思议……if object_id('tempdb..#t','u')is not null
    drop table #t
    create table #t(a int)你是要类似这种吗?