【问题标题】:SELECT INTO in SQL Server vs OracleSQL Server 与 Oracle 中的 SELECT INTO
【发布时间】:2023-03-13 00:45:02
【问题描述】:

这样的东西通常可以在 Oracle 中工作,但我在调整它以在 SQL Server 上工作时遇到问题:

CREATE TABLE mynewtbl AS  
( 
  with 
  a as (select col1, col2, col3 from table1),
  b as (select col4, col5, col6 from table2)
  select col1, col4, col6
) 

我知道我应该使用 SELECT INTO 语句,但是它不起作用。

这是我得到的错误:

关键字“INTO”附近的语法不正确

请帮忙

【问题讨论】:

  • 您期望结果是什么样的?作为了解 SQL Server 但不了解 Oracle 的人,尚不清楚您要实现的目标是什么;您提供的代码不包含into...
  • 请添加您的sql代码。
  • 我有一个巨大的查询,里面充满了 withs 和 union alls。我需要用它创建一个表。在 oracle 中这很容易,只需将表创建为 (...),但我在 sql server 上执行此操作时遇到问题。

标签: sql sql-server oracle


【解决方案1】:

SQL Server 中的代码如下所示:

with a as (
      select col1, col2, col3 from table1
     ),
     b as (
      select col4, col5, col6 from table2
     )
select col1, col4, col6
into mynewtbl
from . . .;

无论数据库如何,您都需要一个from 子句。

【讨论】:

    【解决方案2】:

    认为你想要...

    ; with
        a as ( select col1, col2, col3 from table1),
        b as ( select col4, col5, col6 from table2)
    select col1, col4, col6
    into mynewtbl
    from a, b
    

    (我认为在语法上无效的 cte,但仅用于说明)

    假设您有一个 SELECT 工作,您应该能够在您的 FROM 子句之前立即删除 INTO x

    如果您有一个有效的SELECT 查询(返回表中所需的所有数据),并且由于某些 UNION 等而遇到问题,那么将其包装为子查询应该可以解决问题 - - 将任何 CTE 保持在顶部。

    所以不是

    SELECT a FROM table1
    UNION
    SELECT b FROM table2
    

    你有

    SELECT *
    INTO mytable
    FROM (
        SELECT a FROM table1
        UNION
        SELECT b FROM table2
    ) results
    

    【讨论】:

    • 问题是我有工会。这是我得到的错误:SELECT INTO 必须是包含 UNION、INTERSECT 或 EXCEPT 运算符的语句中的第一个查询。
    • 不幸的是它不起作用。 FROM 和 WITH 关键字似乎有问题。错误:关键字“with”附近的语法不正确。如果这个语句是一个公用表表达式、一个 xmlnamespaces 子句或一个更改跟踪上下文子句,则前面的语句必须以分号结束。
    • 您仍应将 CTE 放在查询顶部,然后在子选择中引用它们。
    猜你喜欢
    • 2012-01-23
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    • 2018-05-22
    • 2015-10-30
    相关资源
    最近更新 更多