Infoga flera rader i en enda SQL-fråga?

Jag har flera datamängder att infoga samtidigt, till exempel 4 rader. Min tabell har tre kolumner: Person", "ID" och "Kontor".

INSERT INTO MyTable VALUES ("John", 123, "Lloyds Office");
INSERT INTO MyTable VALUES ("Jane", 124, "Lloyds Office");
INSERT INTO MyTable VALUES ("Billy", 125, "London Office");
INSERT INTO MyTable VALUES ("Miranda", 126, "Bristol Office");

Kan jag infoga alla 4 rader i ett enda SQL-meddelande?

I SQL Server 2008 kan du infoga flera rader med ett enda SQL INSERT-meddelande.

INSERT INTO MyTable ( Column1, Column2 ) VALUES
( Value1, Value2 ), ( Value1, Value2 )

För referens till detta kan du titta på MOC-kurs 2778A - Writing SQL Queries in SQL Server 2008.

Till exempel:

INSERT INTO MyTable
  ( Column1, Column2, Column3 )
VALUES
  ('John', 123, 'Lloyds Office'), 
  ('Jane', 124, 'Lloyds Office'), 
  ('Billy', 125, 'London Office'),
  ('Miranda', 126, 'Bristol Office');
Kommentarer (13)

Om du infogar i en enda tabell kan du skriva din fråga så här (kanske bara i MySQL):

INSERT INTO table1 (First, Last)
VALUES
    ('Fred', 'Smith'),
    ('John', 'Smith'),
    ('Michael', 'Smith'),
    ('Robert', 'Smith');
Kommentarer (10)

OBS: Det här svaret gäller SQL Server 2005. För SQL Server 2008 och senare finns det mycket bättre metoder, vilket framgår av de andra svaren.

Du kan använda INSERT med SELECT UNION ALL:

INSERT INTO MyTable  (FirstCol, SecondCol)
    SELECT  'First' ,1
    UNION ALL
SELECT  'Second' ,2
    UNION ALL
SELECT  'Third' ,3
...

Detta gäller dock endast för små dataset, vilket borde vara bra för dina 4 poster.

Kommentarer (0)