如何在SQL Server 2008中根据选择查询结果创建一个表

25 浏览
0 Comments

如何在SQL Server 2008中根据选择查询结果创建一个表

我想在SQL Server中从SELECT查询结果创建一张表,我尝试了

create table temp AS select.....

但是我收到了一个错误提示:

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

0
0 Comments

问题的原因是在SQL Server 2008中,使用"SELECT * INTO NewTable FROM OldTable"语句创建表并不总是与MYSQL中的"create table temp AS select.."语句相同。有时候,这种方法不能保证新表中的所有字段与旧表的字段具有相同的数据类型。

解决方法是在创建新表时,手动指定每个字段的数据类型,以确保与旧表相同。不要依赖于"SELECT * INTO NewTable FROM OldTable"语句自动匹配数据类型。

例如,以下代码:

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)

因此,在使用"SELECT * INTO NewTable FROM OldTable"语句创建表时,需要注意数据类型可能不会自动匹配,需要手动指定每个字段的数据类型以确保一致性。

这个问题的出现可能是因为在官方文档中,'SELECT - INTO Clause (Transact-SQL)'中指出:"新表中的每个列具有与选择列表中对应表达式相同的名称、数据类型、可为空性和值",所以一开始可能会误以为数据类型会自动匹配。但是根据测试结果,这个描述可能并不准确。

为了确保创建新表的字段与旧表的字段具有相同的数据类型,应该手动指定每个字段的数据类型,而不是依赖于"SELECT * INTO NewTable FROM OldTable"语句的自动匹配。

0
0 Comments

在SQL Server 2008中,有一个常见的问题是如何从SELECT查询结果创建一个表。这个问题的出现是因为有时候我们需要将查询结果保存到一个新的表中,以便于后续的操作和分析。下面是解决这个问题的方法:

一种解决方法是使用SELECT INTO语句。这个语句可以创建一个新的表,并将SELECT语句的结果集插入到这个新表中。SELECT INTO语句可以将多个表或视图的数据合并到一个表中,也可以从链接服务器中选择数据创建一个新表。

例如,我们可以使用以下代码创建一个临时表,并将查询结果插入到这个临时表中:

SELECT col1, col2 INTO #a -- <<== 创建临时表
FROM tablename

标准的语法如下:

SELECT  col1, ....., col@      -- <<== 选择尽可能多的列
        INTO [New tableName]
FROM    [Source Table Name]

这种方法被认为是正确的解决方法,可以满足我们的需求。

然而,需要注意的是,虽然这种方法在SQL Server中非常有效,但它并不是标准的SQL语法,因此在其他数据库管理系统中可能无法使用。例如,MySQL中的SELECT INTO语法与SQL Server中的不同,有时候它并不会创建一个新表,而是将数据追加到现有表中。

希望这个方法可以帮助你解决在SQL Server 2008中如何从SELECT查询结果创建表的问题。如果你想了解更多关于SELECT INTO语句的信息,可以参考Microsoft的官方文档:Inserting Rows by Using SELECT INTO

0
0 Comments

如何在SQL Server 2008中从SELECT查询结果创建表格

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

Select * into new_table  from  old_table 

这个语法并没有真正回答问题。SELECT查询在哪里呢?

:就在那里。它就在INTO子句的周围...

不,他是说在CREATE TABLE...AS SELECT...中应该有的SELECT语句,而Sanjeev目前使用的是old_table。这是一行很好的代码,但它缺乏CTAS的功能,因为它只是从一个表格中选择,而不是一个SELECT语句,这正是执行CTAS的目的。

-R: SELECT * INTO new_table FROM (SELECT ...) as [fancy derived table]

使用以下语法将你的选择查询结果存入新表格中:

Select * into your_new_table_name  from   (your select query here) as virtual_table_name 

表格将会以"your_new_table_name"的名称创建。

SELECT INTO在创建临时表格时存在严重缺陷,因为你想要创建临时表格以便复制记录到临时表格中,然后对其进行修改,最后将其作为附加记录添加回去。如果在数据库中已经存在名为'x'的对象,那么你就会遇到问题。而且你不想再次指定所有列名。这是元数据,应该很容易做到。这就是CREATE TABLE AS的优势所在。

这个解决方法在2019年仍然适用。

非常好,谢谢-R。as [fancy derived table]是做什么的?似乎不管我在里面放什么都没有关系。

learn.microsoft.com/en-us/azure/synapse-analytics/…

0