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

时间:2012-02-09 06:33:52

标签: sql sql-server

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

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

DECLARE  #TT TABLE(              
  member_id INT,    
  reason varchar(1),    
  record_status varchar(1) ,    
  record_type varchar(1)    
 ) 

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

6 个答案:

答案 0 :(得分:108)

select top 0 *
into #mytemptable
from myrealtable

答案 1 :(得分:9)

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

CREATE TEMP TABLE tmp_table AS SELECT * FROM original_table LIMIT 0;

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

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

ALTER TABLE pg_temp_3.tmp_table DROP COLUMN primary_key;

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

答案 2 :(得分:8)

Sortest one ...

select top 0 * into #temptable from mytable

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

答案 3 :(得分:7)

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

您可以创建一个具有相同列定义的空表:

CREATE TEMPORARY TABLE temp_foo LIKE foo;

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

CREATE TEMPORARY TABLE temp_foo SELECT * FROM foo;

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

CREATE TEMPORARY TABLE temp_foo AS SELECT * FROM foo;

答案 4 :(得分:1)

select * into #temptable from tablename where 1<>1

答案 5 :(得分:0)

将临时表结构克隆到SQL Server中的新物理表

enter image description here

我们将看到如何在SQL Server中将临时表结构克隆到新的物理表。这适用于Azure SQL数据库和内部部署。

演示SQL脚本

IF OBJECT_ID('TempDB..#TempTable') IS NOT NULL
    DROP TABLE #TempTable;

SELECT 1 AS ID,'Arul' AS Names
INTO
#TempTable;

SELECT * FROM #TempTable;

方法1

SELECT * INTO TempTable1 FROM #TempTable WHERE 1=0;

EXEC SP_HELP TempTable1;

enter image description here

方法2

SELECT TOP 0 * INTO TempTable1 FROM #TempTable;

EXEC SP_HELP TempTable1;

enter image description here