2011-03-21 55 views
5

我有以下插入語句,它可以在運行SQL Server 2008的一個系統上正常工作,但我在運行2000的系統上嘗試過同樣的事情,並且出現錯誤...使用SQL Server 2000插入多個值的問題

有沒有一個簡單的解決方案,因爲我有超過3000條記錄插入,我不想一次只做一個!

INSERT INTO uk_postcodes (outcode, lat, lng) 
VALUES ('AB12', '57.098381', '-2.172400'),('AB13', '57.108', '-2.237') 
+1

爲INSERT指定多個元組的能力是2008版本中的新功能 - 在此之前不存在。 – 2011-03-21 10:49:22

回答

8

使用SQL Server 2000,有兩種方法可以做到這一點 -

一個是

INSERT INTO uk_postcodes (outcode, lat, lng) 
VALUES ('AB12', '57.098381', '-2.172400'); 
INSERT INTO uk_postcodes (outcode, lat, lng) 
VALUES ('AB13', '57.108', '-2.237'); 

第二種方法是使用UNION ALL-

INSERT INTO uk_postcodes (outcode, lat, lng) 
SELECT 'AB12', '57.098381', '-2.172400' 
UNION ALL 
SELECT 'AB13', '57.108', '-2.237' 
+0

我設法找到並替換使用您的第一個建議......謝謝 – Tom 2011-03-21 10:54:40

4

隨着比特串的更換,你將能夠轉換腳本到其下面應該工作:

INSERT INTO uk_postcodes (outcode, lat, lng) 
select 'AB12', '57.098381', '-2.172400' union select 'AB13', '57.108', '-2.237' 
0

假設你所有的數據是這樣的嘗試更換所有「) (」「); INSERT INTO uk_postcodes(outcode的,緯度,經度)VALUES(」

1

兩個答案給會工作。欲瞭解更多信息:

http://en.wikipedia.org/wiki/Insert_(SQL) ANSI SQL-92添加了多記錄插入語法,使用逗號分隔VALUES,這就是你正在嘗試使用的。 http://msdn.microsoft.com/en-us/library/ms174335.aspx表語法的

  • 值構造*::http://msdn.microsoft.com/en-us/library/dd776382.aspx
  • 實例:http://msdn.microsoft.com/en-us/library/dd776381.aspx
    • (B對於SQL-服務器具體地,由於版本2008

      • 語法INSERT的溶液中加入該語法的支持插入多行數據)

    對於速度,有一些問題與超長字符串,所以使用

    SELECT .. UNION 
    SELECT .. 
    

    形式,但經過一段時間後約100或1000條記錄開始另一個INSERT。

    *表值構造函數不僅限於INSERT語句。 SQL Server 2008進一步允許它定義一個<derived table>,例如

    SELECT MAX(Amount) 
    FROM (
        VALUES (1),(2),(192),(99) 
    ) Tbl(Amount)