创建具有相同列和类型作为永久表的临时表的最佳方法

Ana*_*nth 60 sql sql-server

我需要创建一个具有相同列和类型的临时表作为永久表.最好的方法是什么?(永久表有超过100列)

通常我会像这样创建表格.

DECLARE  #TT TABLE(              
  member_id INT,    
  reason varchar(1),    
  record_status varchar(1) ,    
  record_type varchar(1)    
 ) 
Run Code Online (Sandbox Code Playgroud)

但有没有办法在不提及列名和类型的情况下执行此操作,但是提及具有所需列的另一个表的名称?

nat*_*lez 114

select top 0 *
into #mytemptable
from myrealtable
Run Code Online (Sandbox Code Playgroud)


Bro*_*oks 10

我意识到这个问题非常古老,但对于任何寻找特定于PostgreSQL的解决方案的人来说,它是:

CREATE TEMP TABLE tmp_table AS SELECT * FROM original_table LIMIT 0;
Run Code Online (Sandbox Code Playgroud)

注意,临时表将被放入类似pg_temp_3的模式中.

这将创建一个临时表,其中包含所有列(没有索引)且没有数据,但是根据您的需要,您可能希望删除主键:

ALTER TABLE pg_temp_3.tmp_table DROP COLUMN primary_key;
Run Code Online (Sandbox Code Playgroud)

如果原始表中没有任何数据,则可以不使用"LIMIT 0".

  • 对于 Postgres,如果您只想获得没有数据的结构的精确副本,那么执行“CREATE TEMP TABLE tmp_table (LIKE Original_table)”也更简洁。 (2认同)

Pra*_*ana 8

排序一...

select top 0 * into #temptable from mytable
Run Code Online (Sandbox Code Playgroud)

注意:这会创建一个空的temp副本,但它不会创建主键


gcb*_*son 7

这是一个特定于MySQL的答案,不知道它在哪里工作 -

您可以使用以下内容创建具有相同列定义的空表:

CREATE TEMPORARY TABLE temp_foo LIKE foo;
Run Code Online (Sandbox Code Playgroud)

您可以使用以下命令创建现有表的填充副本:

CREATE TEMPORARY TABLE temp_foo SELECT * FROM foo;
Run Code Online (Sandbox Code Playgroud)

以下是postgres的作品; 不幸的是,不同的RDBMS在这里似乎不太一致:

CREATE TEMPORARY TABLE temp_foo AS SELECT * FROM foo;
Run Code Online (Sandbox Code Playgroud)