2008-10-24 163 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錶行/條目視爲對象是無益的。再次,只是我的意見。