Sql 为临时表指定架构
我习惯于只使用哈希/数字符号创建临时表,如下所示:Sql 为临时表指定架构,sql,sql-server,sql-server-2005,tsql,Sql,Sql Server,Sql Server 2005,Tsql,我习惯于只使用哈希/数字符号创建临时表,如下所示: CREATE TABLE #Test ( [Id] INT ) 但是,我最近遇到了在创建临时表时指定架构名称的存储过程代码,例如: CREATE TABLE [dbo].[#Test] ( [Id] INT ) 你有什么理由要这么做吗?如果只指定用户的默认模式,是否会有任何区别?这是指本地数据库或tempdb数据库中的[dbo]模式吗?如果指定用户默认模式,则不会有任何区别,但如果用户默认模式更改,则会尝试将临时表保留在db
CREATE TABLE #Test
(
[Id] INT
)
但是,我最近遇到了在创建临时表时指定架构名称的存储过程代码,例如:
CREATE TABLE [dbo].[#Test]
(
[Id] INT
)
你有什么理由要这么做吗?如果只指定用户的默认模式,是否会有任何区别?这是指本地数据库或tempdb数据库中的
[dbo]
模式吗?如果指定用户默认模式,则不会有任何区别,但如果用户默认模式更改,则会尝试将临时表保留在dbo模式中
Temp表是在tempdb中创建的,因此这意味着您需要在tempdb中维护模式,并且没有任何好处。如果您在tempdb上创建模式,并使用该默认模式将用户映射到tempdb,则运行
create TABLE#test(v INT)
会将表创建为“dbo.#test”。尝试在dbo以外的模式下创建临时表将忽略您指定的模式,并在dbo模式中创建它。所以创建表虚拟。#test(vint)
也将创建“dbo.#test”。