create table #temp1(temp1 int) 这是建交临时表的语句吗?
要从哪个库才能找到这个表呢?tempdb找不着这个表。
---------------------------------------------------------------
临时表是建立在内存中的,没有建立在具体的数据库中,程序一旦运行结束,临时表就自动取消了,所以直接看不到临时表。可以用
SELECT * FROM #temp1来查看临时表中的数据。
---------------------------------------------------------------
如果你用CREATE TABLE ##TEMP1(TEMP1 INT),时全局变量,在TEMPDB就可以看到了。
---------------------------------------------------------------
楼上说的都没错
---------------------------------------------------------------
楼上的回答通通有误!!!
不管是局部临时表或者全局临时表。
都会存放在tempdb中的。
不过因为全局临时表同名的只能有一个,因此SQL Server不要做出任何特别的处理。
但是由于局部临时表是基于session存在的,每个session拥有自己的局部临时表,那怕它的名字都是一样但却是不同的对象。因此SQL Server会做出一些特殊的处理,tempdb的sysobjects在存放局部临时表的时候,它会在局部临时表的后面加上一些后缀,不过每个对象的objectid是不一样的,SQL Server可以通过objectid指向正确的对象。
这就是为什么在自己的DB下用select * from #temp1也能找到正确的对象一样。
只要执行下面的语句,你们就会知道局部临时表仍然是存放在tempdb中的:
select * from tempdb.dbo.sysobjects where id = object_id('tempdb.dbo.#temp1')
---------------------------------------------------------------
use tempdb;
select name from sysobjects;
就可以看到建立的临时表
生存期间
如果不drop table,通过重新启动服务可以清除掉临时表
局部临时表的清除或者在另一个会话中使用没什么意义,因为局部临时表本身就是基于会话的。可以参照使用全局临时表。
如何在临时表中使用自定义的数据类型。
在tempdb中,只有sql server内置的数据类型,使用自定义数据类型需要在master库中书写一个服务启动自动运行的存储过程,存储过程的工作就是建立自定义数据类型到tempdb中,例如:
CREATE PROCEDURE [dbo].[sp_AddDefinedDataTypeToTempDb] AS
exec('use tempdb
if exists (select * from dbo.systypes where name = N''utAccountNum'')
exec sp_droptype N''utAccountNum''
EXEC sp_addtype N''utAccountNum'', N''varchar (20)'', N''null''
')
GO
exec sp_procoption N'sp_AddDefinedDataTypeToTempDb', N'startup', N'true'
GO