如何在 SQL Server 中使用 Create 语句创建临时表?
Posted
技术标签:
【中文标题】如何在 SQL Server 中使用 Create 语句创建临时表?【英文标题】:How to create temp table using Create statement in SQL Server? 【发布时间】:2017-08-19 00:00:58 【问题描述】:如何像创建普通表一样创建临时表?
例子:
CREATE TABLE table_name
(
column1 datatype,
column2 datatype,
column3 datatype,
....
);
【问题讨论】:
在表名前加#
simple-talk.com/sql/t-sql-programming/…
我投票结束这个问题,因为它可以通过简单的谷歌搜索来回答
【参考方案1】:
同样的,表名以#
或##
开头:
CREATE TABLE #TemporaryTable -- Local temporary table - starts with single #
(
Col1 int,
Col2 varchar(10)
....
);
CREATE TABLE ##GlobalTemporaryTable -- Global temporary table - note it starts with ##.
(
Col1 int,
Col2 varchar(10)
....
);
临时表名以#
或##
开头——第一个是本地临时表,最后一个是全局临时表。
Here 是描述它们之间差异的众多文章之一。
【讨论】:
【参考方案2】:一个临时表可以有3种,#
是最常用的。这是一个仅存在于当前会话中的临时表。
与此等效的是@
,它是一个声明的表变量。这具有较少的“功能”(如索引等),并且也仅用于当前会话。
##
与#
相同,但是范围更广,因此您可以在同一会话中,在其他存储过程中使用它。
您可以通过多种方式创建临时表:
declare @table table (id int)
create table #table (id int)
create table ##table (id int)
select * into #table from xyz
【讨论】:
session 的使用不正确...@table
与任何变量一样 - 绑定到一项作业。它会随着GO
而消失,并且被调用的 SP 或函数不知道它。 #table
将存在于一个会话中,即使在被调用的 SP 或函数中,而 ##table
可以从不同的会话中访问。
另外,表变量不是临时表。阅读 Martin Smith 的post on DBO.StackExchange about it 了解详情。
表变量由于缺乏索引和统计信息,通常会导致执行计划不佳。它们的范围是当前的 batch,而不是“作业”或会话。虽然它们有其用途,但它们通常不是临时表的最佳选择。
表变量是临时表,而不是在 tempdb 中创建的表。但是,即使是 @ 表也使用 tempdb(请参阅 blog.sqlauthority.com/2009/12/15/…)
表变量与临时表不同。它们完全不同。此外,可以在不同的会话中访问全局临时表 (##
),如果我没记错的话,也可以通过不同的登录名访问。以上是关于如何在 SQL Server 中使用 Create 语句创建临时表?的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server - 你可以在 CREATE TABLE 中添加字段描述吗?
SQL Server 中“CREATE TABLE table AS”中的“分发选项”错误
python能创建sql server数据库,执行create database语句吗?