SQL临时数据库,临时表和表之间的区别
问题描述:
我想知道,在表部分创建表的临时数据库不同于创建哈希表。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和哈希表一样吗? 我的意思是这个普通表的行为像一个临时表,因为它已经在临时数据库中创建?
答
是否在TempDB的表部分中创建表与创建Hash表有所不同。是否在临时数据库和散列表中的这些表是相同的?
在TempDB
dbo.temp
将继续下去,直到系统reboot.since临时数据库将从头开始(使用模型数据库中作为模板)来重新创建,重启后
#temp
将只能在这个会议
有还有一些差异,适用于#temp like,你不能创建
1.triggers
2.外键
综上所述,dbo.temp在tempdb的行为就像普通表
答
你并不需要这样做:
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
否则临时表将持续存在。如果它是在存储过程中创建的,那么一旦它超出范围,临时表将为您清理。
“如果它是在存储过程中创建的,一旦它超出范围,临时表将按计划清理。” - 不知道你在这里说什么。在存储过程中创建的临时表被明确记录为在存储过程返回时被删除。 –
@Damien_The_Unbeliever好的,这是我的理解中的一个缺陷,很好知道。 – Tanner
这里是我所指的[documentation](https://msdn.microsoft.com/en-us/library/ms174979.aspx)(查看Temporary Tables下的第一个项目符号) –