2017-03-26 159 views
4

如何创建类似于创建普通表的临时表?如何使用SQL Server中的Create语句创建临时表?

例子:

CREATE TABLE table_name 
(
    column1 datatype, 
    column2 datatype, 
    column3 datatype, 
    .... 
); 
+1

之前表名 – Hadi

+0

https://www.simple-talk.com/sql/t-sql-programming/temporary只需添加''# -tables-in-sql-server/ – Hadi

+0

我投票结束这个问题作为题外话,因为它可以通过一个简单的谷歌搜索回答 – alroc

回答

7

临时表可以有3种,#是最常用的。这是只存在于当前会话中的临时表。 与此相当的是@,这是一个声明的表变量。这有一点“功能”(如索引等),也只用于当前会话。 ###相同,但范围更宽,因此您可以在同一个会话中,在其他存储过程中使用它。

您可以通过多种方式创建临时表:

declare @table table (id int) 
create table #table (id int) 
create table ##table (id int) 
select * into #table from xyz 
+0

* session *的用法不正确... @ @ table是 - 像任何变量 - 绑定到一个作业。它会通过一个'GO'消失,而一个被称为SP的函数不知道它。一个'#表'将存在于一个会话中,即使是在一个被调用的SP或函数中,而一个'## table'可以从不同的会话到达。 – Shnugo

+1

另外,表变量不是临时表。阅读Martin Smith的[关于DBO.StackExchange的帖子](http://dba.stackexchange.com/questions/16385/whats-the-difference-between-a-temp-table-and-table-variable-in-sql -server/16386#16386)。 –

+0

由于缺乏索引和统计信息,表变量往往会导致执行计划不佳。它们的范围是当前**批次**,而不是“作业”或会话。虽然他们有它们的用途,但他们通常不是临时表的最佳选择。 – alroc

10

同样的事情,只是###启动表名:

CREATE TABLE #TemporaryTable -- Local temporary table 
(
    Col1 int, 
    Col2 varchar(10) 
    .... 
); 

CREATE TABLE ##GloablTemporaryTable -- Gloabl temporary table - note it starts with ##. 
(
    Col1 int, 
    Col2 varchar(10) 
    .... 
); 

临时表的名字开始与### - 第一个是本地临时表最后一个是全球临时表。
Here是描述它们之间差异的许多文章之一。

+0

我投了你的票。被接受的答案有一些缺陷... – Shnugo

相关问题