日期:2014-05-16  浏览次数:20611 次

tempdb中的表与与临时表有何区别?几处系统数据库的用处?

如上, 有何区别?
感觉 tempdb 中的表有些多余, 根本用不着。

此外, 还请教一下系统数据库的用处:
master、model、msdb、tempdb
------解决方案--------------------
表是全局的
临时表是会话级别

------解决方案--------------------
tempdb数据库中的表:

1、表:其实就是普通的表,虽然这个tempdb是临时数据库,但如果是创建的表,那么这个表是一直存在的,但是系统如果重启,那么这个表没有了,为什么呢?

因为临时数据库,是每次启动时重新创建的,所以数据库重建,那么原来的表没有了。

2.临时表:一般是指局部临时表,就是#名称的,那么这个表在创建的会话中可见,一旦会话结束了,就没有了,另外,也有全局临时表,一旦创建全局临时表的回话退出了,或者其他引用表的会话退出了,那么表就会删除

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

tempdb数据库中的表:

1、表:其实就是普通的表,虽然这个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 @tempTable

DECLARE @i INT,@iMax INT,@sql NVARCHAR(MAX)
SELECT @i=1,@iMax=COUNT(1) FROM @tempTable

WHILE @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' 执行 删除,因为它不存在,或者您没有所需的权限。

但就没有办法删除么?


这个一般只能是在创建这个临时表的会话来删除的
------解决方案--------------------
自动清除,不用你这样的