如何在SQL Server 2008中从选择查询结果创建表

271

我想从SQL Server的选择查询结果创建一个表,我尝试过

create table temp AS select.....

但是我收到了一个错误

关键字'AS'附近语法不正确。


创建临时表temp,作为从Oracle中选择1的结果。 - Elmer
7
标记为重复的状态是否可以取消?与之相关联的另一个问题表述不够清晰且回答较少。 - Ed Avis
之前的重复问题:https://dev59.com/0Gsy5IYBdhLWcg3wzBB4 - krlmlr
6个回答

455

使用以下语法在SQL Server 2008中从旧表创建新表

Select * into new_table  from  old_table 

17
这并没有真正回答这个问题。SELECT查询语句在哪里? - quant
8
@Jason:就在那里,就在“INTO”子句的周围... - Lukas Eder
4
不,他指的是CREATE TABLE...AS SELECT...语句中的select,目前Sanjeev在那里使用了old_table。这是一行不错的代码,但它缺少CTAS的功能,因为它只从一个表中选择,而不是从SELECT语句中选择,这也是使用CTAS的关键所在。 - Hack-R
2
从以下查询语句中选择*,并将结果存入新表your_new_table_name中: (your select query here) as virtual_table_name 新表将以“your_new_table_name”命名。 - Mogli
显示剩余4条评论

120

使用 SELECT...INTO 语句可以创建一个新表,并将 SELECT 语句的结果集填充到该表中。SELECT INTO 可以用于将多个表或视图的数据合并到一个表中,也可以用于创建一个包含从链接服务器选择的数据的新表。

例如,

SELECT col1, col2 INTO #a -- <<== creates temporary table
FROM   tablename

标准语法,

SELECT  col1, ....., col@      -- <<== select as many columns as you want
        INTO [New tableName]
FROM    [Source Table Name]

7
应将此标记为正确答案。 - Led
2
同意。这是正确的答案。 - Dickie Watkins
我在这里找到了引用的文档:https://learn.microsoft.com/en-us/sql/t-sql/queries/select-into-clause-transact-sql?view=sql-server-ver15。虽然这对于SQL Server非常有效,但似乎“SELECT ... INTO”不是标准SQL(因此不能移植到其他DBMS),有时类似的语法不会创建新表,而是将数据附加到现有表中,例如:https://dev.mysql.com/doc/refman/8.0/en/ansi-diff-select-into-table.html。 - flow2k

35

请小心,MSSQL:"SELECT * INTO NewTable FROM OldTable"

并不总是与MYSQL:"create table temp AS select.."

相同。我认为在某些情况下(在MSSQL中)这不能保证新表中的所有字段与旧表中的字段类型相同。

例如:

create table oldTable (field1 varchar(10), field2 integer, field3 float)
insert into oldTable (field1,field2,field3) values ('1', 1, 1)
select top 1 * into newTable from oldTable

并非总是产生:

create table newTable (field1 varchar(10), field2 integer, field3 float)

但可能是:

create table newTable (field1 varchar(10), field2 integer, field3 integer)

2
这是正确的。上面有很多重复的解决方案,它们都忽略了这个关键区别。 - Hack-R
11
根据“SELECT-INTO子句(Transact-SQL)”官方文档:“new_table中的每个列都与select列表中相应表达式具有相同的名称、数据类型、可空性和值。”。请原谅我的无知,我有所遗漏吗? - HEDMON
1
@HEDMON 我认为这可能不是在回答发布时的情况。我刚刚测试了上面的代码,得到了与官方文档中相同的答案。field3 是使用浮点数据类型创建的,就像旧表格上一样。 - Pedro Lopes

20
请尝试:
SELECT * INTO NewTable FROM OldTable

16

尝试使用 SELECT INTO....

SELECT ....
INTO     TABLE_NAME(table you want to create)
FROM source_table

6
Select [Column Name] into [New Table] from [Source Table]

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