2008-10-24 146 views
72

我一直在使用T-SQL的MS SQL一段时间了,不管怎样,每当我有将数据插入到表中我倾向于使用语法:INSERT VS INSERT INTO

INSERT INTO myTable <something here> 

我明白关键词INTO在这里是可选的,我不必使用它,但不知何故它成长为我的情况下的习惯。

我的问题是:

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

回答

72

INSERT INTO是标准。即使INTO在大多数实现中都是可选的,但它只需要几个,所以最好包含它以确保您的代码是可移植的。

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

+1

本书“SQL-99 Complete,Really”说Sybase(以及MS SQL Server)以非标准方式运行,允许INTO成为可选项。其他品牌的数据库需要关键字。 – 2008-10-24 16:38:40

+2

没错。如果你总是使用INTO,你不需要记住哪些人认为它是可选的。所有的实现都允许它被使用。 – 2008-10-24 19:12:49

1

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

10

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

18

它们是一样的东西,INTO在T-SQL中是完全可选的(其他SQL方言可能有所不同)。

与其他答案相反,我认为它削弱了使用INTO的可读性。

我认为这是一个概念性的东西:在我的感觉,我不是插入到一个名为“客户”表,但我插入客户。 (这与我用单数命名我的表的事实有关,而不是复数)。

如果您遵循第一个概念,INSERT INTO Customer很可能对您“感觉不错”。

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

+5

我认为你的方法面临的风险是你可能会导致新的程序员混淆对象与表。 – 2008-10-24 15:25:59

0

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

4

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

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

0

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

3

在SQL Server 2005中,你可以有这样的INSERT INTO和之间的东西:

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

虽然作品,未经INTO,我更喜欢用成可读性。

0

我开始在ORACLE上强制SQL,所以当我看到没有INTO的代码时,它只是看起来'破碎'而且令人困惑。

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

使用SQL我认为这也是非常重要的,要意识到您将一个行添加到TABLE,而不是使用对象。我认为这对于新开发人员来说将SQL表行/条目视为对象是无益的。再次,只是我的意见。