2011-11-29 70 views
4

我已经习惯了看到只用哈希/数字符号创建临时表,就像这样:指定模式

CREATE TABLE #Test 
(
    [Id] INT 
) 

不过,我最近遇到的存储过程的代码,指定架构创建临时表时的名称,例如:

CREATE TABLE [dbo].[#Test] 
(
    [Id] INT 
) 

你有什么理由要这样做吗?如果你只是指定用户的默认模式,它有什么区别?这是否涉及本地数据库或tempdb数据库中的[dbo]模式?

回答

8

它不会让任何区别,如果你指定用户的默认模式,但如果用户的默认架构更改然后它会尽量保持临时表dbo架构。

临时表在tempdb中创建,所以它意味着您需要维护tempdb中的架构,并且不提供任何好处。

+2

如果您在tempdb上创建了一个模式,并将该用户映射到具有该默认模式的tempdb,那么运行CREATE TABLE #test(v INT)会将该表创建为“** dbo **。#test”。尝试在dbo以外的模式下创建临时表会忽略您指定的模式,并在dbo模式中创建它。所以'CREATE TABLE dummy。#test(v INT)'也会创建“** dbo **。#test”。 – Jim