INSERT与INSERT INTO

我一直在MS SQL中使用T-SQL一段时间,不知何故,当我不得不向表中插入数据时,我倾向于使用语法:

INSERT INTO myTable <something here> 

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

我的问题是:

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

INSERT INTO是标准。 尽pipe在大多数实现中INTO是可选的,但是在less数情况下需要INTO ,所以最好包含INTO以确保代码的可移植性。

你可以在这里find几个SQL标准版本的链接。 我在这里find了旧版标准的HTML版本。

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

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

我认为这是一个概念性的东西:根据我的理解,我并没有在名为“Customer”的表中插入一行 ,但是我插入了一个Customer 。 (这与我用单数命名表的事实有关,而不是复数)。

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

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

在mySQL中可能是可选的,但在其他一些数据库pipe理系统中是强制性的,例如Oracle。 因此,SQL将更有可能与INTO关键字一起移植,这是值得的。

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

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

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

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

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

他们都做同样的事情。 INTO是可选的(在SQL Server的T-SQL),但艾滋病的可读性。

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

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

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

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

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