Sql 创建与永久表具有相同列和类型的临时表的最佳方法
我需要创建一个临时表,其列和类型与永久表相同。最好的方法是什么?永久表有100多列 i、 e 通常我创建这样的表Sql 创建与永久表具有相同列和类型的临时表的最佳方法,sql,sql-server,Sql,Sql Server,我需要创建一个临时表,其列和类型与永久表相同。最好的方法是什么?永久表有100多列 i、 e 通常我创建这样的表 DECLARE #TT TABLE( member_id INT, reason varchar(1), record_status varchar(1) , record_type varchar(1) ) 但是有没有办法不提及列名和类型,而是提及另一个包含所需列的表的名称 选择一个 select
DECLARE #TT TABLE(
member_id INT,
reason varchar(1),
record_status varchar(1) ,
record_type varchar(1)
)
但是有没有办法不提及列名和类型,而是提及另一个包含所需列的表的名称 选择一个
select top 0 *
into #mytemptable
from myrealtable
select top 0 * into #temptable from mytable
注意:这会创建temp的一个空副本,但不会创建主键。这是一个特定于MySQL的答案,不确定它还能在哪里工作- 您可以创建一个具有相同列定义的空表:
CREATE TEMPORARY TABLE temp_foo LIKE foo;
您可以使用以下内容创建现有表的填充副本:
CREATE TEMPORARY TABLE temp_foo SELECT * FROM foo;
以及以下博士后作品;不幸的是,不同的RDBMS在这里似乎不太一致:
CREATE TEMPORARY TABLE temp_foo AS SELECT * FROM foo;
我意识到这个问题非常古老,但对于寻找PostgreSQL特定解决方案的人来说,它是:
CREATE TEMP TABLE tmp_table AS SELECT * FROM original_table LIMIT 0;
注意,temp表将被放入类似pg_temp_3的模式中
这将创建一个临时表,其中包含所有不带索引和数据的列,但是根据需要,您可能需要删除主键:
ALTER TABLE pg_temp_3.tmp_table DROP COLUMN primary_key;
如果原始表中没有任何数据,可以取消0限制。将临时表结构克隆到SQL Server中的新物理表
我们将了解如何将临时表结构克隆到SQL Server中的新物理表。这适用于Azure SQL db和内部部署
演示SQL脚本
方法1
方法2
这不是临时表,这是一个表变量。@nathangonzalez-是的,它是..更新问题。。我相信这两个答案都适用。。如有疑问,请告知not@Ananth,表变量必须显式声明,因此它最初的方式与现在一样好。可以使用select into语句创建临时表,这比手工键入更经得起时间考验,也更省时ddl@fyr,我看不出这是对那个问题的重复。他甚至没有在他的问题中提到“选择进入”,而且大部分答案都是无关的。@fyr。。我不需要数据。只需要一个具有相同模式的表,它也会插入所有数据。@nathangonzalez:我试过了,解决方案非常有效。。只是在没有任何数据的情况下创建了表。我一直对这个ID和自动递增ID有问题。当插入到临时表中时,ID被重置。+1与0=1一起移动,但您的解决方案更快。@JoachimIsaksson-只是出于兴趣,您是如何测量的?我自己做了一些粗略的测试,没有发现两者之间有什么区别。@MikaelEriksson没有做更深入的分析,但我看到了一个细微的区别,运行较旧的SQL server,top 0似乎根本无法访问表或索引,而其中0=1似乎访问主键索引。虽然不确定时间上的差异有多大,但我们没有一个庞大的表来测试。此外,这听起来相当依赖于实现,因此在较新的版本中可能会有所不同。@MikaelEriksson可以确认,2008R2似乎在时间上对这两个版本占用了相同的时间,只需要50万行以上的大表。但我没有跟踪权限的数据库,所以看不出它的计划是否相同。注意:如果myrealtable有任何计算列,它们将作为实际列插入临时表中,这通常是不可取的。如果我没有弄错的话,这里的缺点是sql server必须为表中的每一行计算11。@nathangonzalez:No,没有。优化器并没有那么笨。@ypercube,那么我想我错了。我看到它不断地扫描。我想我应该检查一下。
ALTER TABLE pg_temp_3.tmp_table DROP COLUMN primary_key;
IF OBJECT_ID('TempDB..#TempTable') IS NOT NULL
DROP TABLE #TempTable;
SELECT 1 AS ID,'Arul' AS Names
INTO
#TempTable;
SELECT * FROM #TempTable;
SELECT * INTO TempTable1 FROM #TempTable WHERE 1=0;
EXEC SP_HELP TempTable1;
SELECT TOP 0 * INTO TempTable1 FROM #TempTable;
EXEC SP_HELP TempTable1;