我需要创建一个具有相同列和类型的临时表作为永久表。最好的方法是什么? (永久表有超过100列)
即
通常我会像这样创建表格。
DECLARE #TT TABLE(
member_id INT,
reason varchar(1),
record_status varchar(1) ,
record_type varchar(1)
)
但有没有办法在不提及列名和类型的情况下执行此操作,但是提及具有所需列的另一个表的名称?
答案 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中的新物理表
我们将看到如何在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;
方法2
SELECT TOP 0 * INTO TempTable1 FROM #TempTable;
EXEC SP_HELP TempTable1;