在SQL Server中基于临时表创建永久表

5

我有一个临时表,它汇总了来自多个表的列。

我想将这个临时表转换成永久表,而不需要显式地指定列名和它们的类型。

不知道我是否已经解释清楚了。


1
似乎类似于https://dev59.com/AWQn5IYBdhLWcg3woIYF或https://dev59.com/e2gu5IYBdhLWcg3wv5Ya。 - xQbert
1个回答

14
您可以使用 SELECT ... INTO 语句:
SELECT *
INTO dbo.normal_table
FROM #temp_table
-- WHERE 1 = 2;   --add if you only want table structure and not actual data

创建表格后需要检查的事项:

  • IDENTITY列和当前值(可能需要重新设置)
  • 列的默认值(如果临时表有默认值,则需要使用ALTER修改普通表)
  • COLLATION,tempdb可能与您的数据库具有不同的排序规则
  • 列的大小、精度和比例(例如VARCHARNVARCHARCHARDECIMAL等),如果SELECT包含表达式

如果临时表不包含IDENTITY列,您可以使用以下命令添加:

SELECT ID  = IDENTITY(INT,1,1)
     ,col1 = NULL   -- NULL by default are treated as INT so you may need casting
     ,col2 = CAST(NULL AS DECIMAL(38,10))
     ,t.*
INTO dbo.table_name
FROM #temp t

这里出现了错误:数据库中已经有一个名为 'table_name' 的对象。 - Renascent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接