指定临时表的模式

Tom*_*ter 6 sql t-sql sql-server sql-server-2005

我习惯于看到只用哈希/数字符号创建的临时表,如下所示:

CREATE TABLE #Test
(
    [Id] INT
)
Run Code Online (Sandbox Code Playgroud)

但是,我最近遇到了存储过程代码,它在创建临时表时指定了模式名称,例如:

CREATE TABLE [dbo].[#Test]
(
    [Id] INT
)
Run Code Online (Sandbox Code Playgroud)

你有什么理由要这么做吗?如果您只是指定用户的默认架构,它会有什么不同吗?这是指[dbo]本地数据库或tempdb数据库中的模式吗?

Ste*_*ner 10

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

临时表是在tempdb中创建的,这意味着您需要在tempdb中维护模式,并且没有任何好处.

  • 如果在tempdb上创建模式,并使用该默认模式将用户映射到tempdb,则运行`CREATE TABLE #test(v INT)`会将表创建为"**dbo**.#test".尝试在dbo以外的模式下创建临时表将忽略您指定的模式,并在dbo模式中创建它.所以`CREATE TABLE dummy.#test(v INT)`也会创建"**dbo**.#test". (4认同)