2017-02-14 202 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下的第一個項目符號) –