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

yog*_*239 183 sql sql-server sql-server-2008

我想在SQL Server中从select查询结果创建一个表,我试过了

create table temp AS select.....
Run Code Online (Sandbox Code Playgroud)

但是我收到了一个错误

关键字"AS"附近的语法不正确

San*_*Rai 319

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

Select * into new_table  from  old_table 
Run Code Online (Sandbox Code Playgroud)

  • @Hack-R:[`SELECT * INTO new_table FROM (SELECT ...) as [花式派生表]`](http://sqlfiddle.com/#!3/d41d8/40242) (26认同)
  • 这并没有真正回答这个问题.`SELECT`查询在哪里? (8认同)
  • @Jason:就在那里.它围绕着`INTO`条款...... (7认同)
  • @LukasEder不,他的意思是在CREATE TABLE ... AS SELECT ...中的“ select”,Sanjeev当前拥有“ old_table”的位置。这是一段不错的代码,但是缺少CTAS的功能,因为它仅从表中选择,而不是从SELECT语句中选择,这是执行CTAS的关键 (2认同)
  • 从(您的选择查询)中选择*into your_new_table_name,因为将使用"your_new_table_name"创建virtual_table_name表. (2认同)

Joh*_*Woo 72

使用 SELECT...INTO

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

例,

SELECT col1, col2 INTO #a -- <<== creates temporary table
FROM   tablename
Run Code Online (Sandbox Code Playgroud)

标准语法,

SELECT  col1, ....., col@      -- <<== select as many columns as you want
        INTO [New tableName]
FROM    [Source Table Name]
Run Code Online (Sandbox Code Playgroud)

  • 这应该标记为正确的答案. (5认同)
  • 同意 这是正确的答案。 (2认同)

小智 25

请小心,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
Run Code Online (Sandbox Code Playgroud)

并不总是屈服:

create table newTable (field1 varchar(10), field2 integer, field3 float)
Run Code Online (Sandbox Code Playgroud)

但可能是:

create table newTable (field1 varchar(10), field2 integer, field3 integer)
Run Code Online (Sandbox Code Playgroud)

  • 来自**'SELECT - INTO子句(Transact-SQL)'的官方文档**:"new_table中的每一列都具有与选择列表中相应表达式相同的名称,数据类型,可空性和值." (https://docs.microsoft.com/en-us/sql/t-sql/queries/select-into-clause-transact-sql).请原谅我的无知,我错过了什么吗? (5认同)
  • 这是对的.上面有大量重复的解决方案,都错过了这个重要的区别. (2认同)

小智 11

尝试使用SELECT INTO ....

SELECT ....
INTO     TABLE_NAME(table you want to create)
FROM source_table
Run Code Online (Sandbox Code Playgroud)


Tec*_*hDo 10

请试试:

SELECT * INTO NewTable FROM OldTable
Run Code Online (Sandbox Code Playgroud)


小智 6

Select [Column Name] into [New Table] from [Source Table]
Run Code Online (Sandbox Code Playgroud)