INSERT vs INSERT INTO

时间:2008-10-24 15:02:31

标签: sql sql-server tsql

我已经在MS SQL中使用T-SQL一段时间了,不管怎样,每当我必须将数据插入表中时,我倾向于使用语法:

INSERT INTO myTable <something here>

我理解关键字INTO在这里是可选的,我不必使用它,但不知怎的,它在我的案例中变成了习惯。

我的问题是:

  • 使用INSERT语法与INSERT INTO
  • 有什么影响
  • 哪一个完全符合标准?
  • 它们是否在SQL标准的其他实现中都有效?

9 个答案:

答案 0 :(得分:83)

INSERT INTO是标准。尽管INTO在大多数实现中都是可选的,但它只是少数需要,因此最好包含它以确保您的代码是可移植的。

您可以找到SQL标准here的多个版本的链接。我找到了旧版标准here的HTML版本。

答案 1 :(得分:20)

它们是相同的,INTO在T-SQL中是完全可选的(其他SQL方言可能不同)。

与其他答案相反,我认为这会影响使用INTO的可读性。

我认为这是一个概念性的事情:在我看来,我没有将插入名为“Customer”的表中,但我正在插入 Customer 。 (这与我用来以单数形式命名我的表而不是复数形式的事实有关。)

如果您遵循第一个概念,INSERT INTO Customer很可能会“感觉正确”。

如果您遵循第二个概念,那么很可能是INSERT Customer

答案 2 :(得分:10)

它可能在mySQL中是可选的,但在某些其他DBMS中是必需的,例如Oracle。因此,使用INTO关键字,SQL将更具可移植性,这是值得的。

答案 3 :(得分:4)

我倾向于关于这个问题的一个教训是你应该始终保持一致!如果使用INSERT INTO,也不要使用INSERT。如果你不这样做,一些程序员可能会再次提出同样的问题。

这是我的另一个相关示例案例:我有机会在MS SQL 2005中更新非常长的存储过程。问题是过多的数据被插入到结果表中。我必须找出数据的来源。我试图找出新记录的添加位置。在SP的开头部分,我看到了几个INSERT INTO。然后我试图找到“INSERT INTO”并更新它们,但我错过了一个只使用“INSERT”的地方。那个实际上在一些列中插入了4k +行的空数据!当然,我应该只搜索INSERT。然而,这发生在我身上。我责怪以前的程序员IDIOT :):)

答案 4 :(得分:3)

在SQL Server 2005中,您可以在INSERT和INTO之间使用以下内容:

INSERT top(5) INTO tTable1 SELECT * FROM tTable2;

虽然它没有INTO,但我更喜欢使用INTO来提高可读性。

答案 5 :(得分:1)

他们都做同样的事情。 INTO是可选的(在SQL Server T-SQL中),但有助于提高可读性。

答案 6 :(得分:0)

我更喜欢使用它。它保持与SQL语言的其他部分相同的语法描述感和可读性,如group BYorder BY

答案 7 :(得分:0)

如果可用,请使用标准功能。并不是说您需要为特定数据库提供可移植性,但您可能需要为SQL知识提供可移植性。 一个特别讨厌的T-SQL示例是使用isnull,使用coalesce!

答案 8 :(得分:0)

我开始在ORACLE上对SQL进行重命名,所以当我看到没有INTO的代码时,它只会看起来很破坏&#39;而且令人困惑。

是的,这只是我的观点,而且我并不是说应该总是使用INTO。但是你不应该意识到许多其他人可能会想到同样的事情,特别是如果他们没有开始使用新的实现编写脚本。

使用SQL,我认为您实现向表中添加ROW并且不使用对象也非常重要。我认为新的开发人员将SQL表行/条目视为对象是没有用的。再一次,只是我的意见。