【问题标题】:SQL Server Insert Without INTO没有 INTO 的 SQL Server 插入
【发布时间】:2011-03-22 23:22:16
【问题描述】:

这可能是一个非常基本的 SQL 问题,但我看到了一个没有子句 INTO 的 SQL INSERT 语句,我想知道这是否是 SQL 中的一些特殊情况服务器 2000 或 2008。

INSERT 语句类似于

INSERT <table_name>
(
  column names
)
select *
from <another table>
where <condition>

对不起,如果这是超级基本的,但我只是想确定一下。 谢谢!

【问题讨论】:

    标签: sql sql-server insert


    【解决方案1】:

    INTO 是optional。在ANSI sql 中它是必需的,但 MS/Sybase 开发人员决定将其设为可选。

    【讨论】:

    • 谢谢。我刚刚运行了一个带有和不带有 INTO 子句的插入语句,结果是一样的。
    【解决方案2】:

    检查BNF语法http://savage.net.au/SQL/

    92、99、SQL:2003

    <insert statement> ::= INSERT INTO <insertion target> <insert columns and source>
    

    根据 ANSI 规范,INTO 只能在 MERGE 子句中是可选的。

    对于SQL Server(此链接从 2000 年开始显示它的历史 - 它存在于 SQL Server 的第一个版本中),它是可选的。它对于 MySQL 也是可选的。

    INSERT [ INTO]
        { table_name WITH ( < table_hint_limited > [ ...n ] )
            | view_name
            | rowset_function_limited
        }
    
        {    [ ( column_list ) ]
            { VALUES
                ( { DEFAULT | NULL | expression } [ ,...n] )
                | derived_table
                | execute_statement
            }
        }
        | DEFAULT VALUES 
    

    【讨论】:

      【解决方案3】:

      来自 MSDN:

      INTO 是一个可选关键字,可以 在 INSERT 和目标之间使用 表。

      http://msdn.microsoft.com/en-us/library/aa933206%28v=sql.80%29.aspx

      【讨论】:

        【解决方案4】:

        您提到这来自早期版本的 SQL。如果您现在运行 2005 年以后的版本,则可以放弃 INTO。

        【讨论】:

          猜你喜欢
          • 2019-02-11
          • 1970-01-01
          • 1970-01-01
          • 2015-02-25
          • 1970-01-01
          • 2015-04-01
          • 2012-01-23
          • 2020-02-03
          • 1970-01-01
          相关资源
          最近更新 更多