2017-02-14 195 views
0

我想知道,在表部分创建表临时数据库不同于创建哈希表。SQL临时数据库,临时表和表之间的区别

创建在临时DB

USE [tempdb] 
GO 

/****** Object: Table [dbo].[abc] Script Date: 2/14/2017 4:04:31 PM ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

CREATE TABLE [dbo].[abc](
    [id] [int] NULL, 
    [name] [nchar](10) NULL 
) ON [PRIMARY] 

GO 

表创建一个哈希表

CREATE TABLE #abcd(
id INT, 
name varchar(10) 
) 

INSERT INTO #abcd VALUES (1,'22') 

难道这些表在临时DB和哈希表一样吗? 我的意思是这个普通表的行为像一个临时表,因为它已经在临时数据库中创建?

回答

2

是否在TempDB的表部分中创建表与创建Hash表有所不同。是否在临时数据库和散列表中的这些表是相同的?

TempDBdbo.temp将继续下去,直到系统reboot.since临时数据库将从头开始(使用模型数据库中作为模板)来重新创建,重启后

#temp将只能在这个会议

有还有一些差异,适用于#temp like,你不能创建

1.triggers
2.外键

综上所述,dbo.temp在tempdb的行为就像普通表

1

你并不需要这样做:

USE [tempdb] 

这不是它的工作方式。做你在你的第二个查询,而上面的一行做什么会自动使用tempdb

-- this creates a temp table in tempdb for you 
CREATE TABLE #abcd(
id INT, 
name varchar(10) 
) 

您不必指定。第一个查询不正确。您不应该专门尝试写入tempdb,SQL服务器管理那里的表的创建和整理,因此您不必。

如果你有一个开放的查询,那么它是很好的做法,这样做的时候,你就大功告成了:

DROP TABLE #abcd 

否则临时表将持续存在。如果它是在存储过程中创建的,那么一旦它超出范围,临时表将为您清理。

+1

“如果它是在存储过程中创建的,一旦它超出范围,临时表将按计划清理。” - 不知道你在这里说什么。在存储过程中创建的临时表被明确记录为在存储过程返回时被删除。 –

+0

@Damien_The_Unbeliever好的,这是我的理解中的一个缺陷,很好知道。 – Tanner

+1

这里是我所指的[documentation](https://msdn.microsoft.com/en-us/library/ms174979.aspx)(查看Temporary Tables下的第一个项目符号) –