关于sql server:在一个SQL查询中插入多行?

Inserting multiple rows in a single SQL query?

本问题已经有最佳答案,请猛点这里访问。

我有多组数据要一次插入,比如说4行。

我的桌子有三列:PersonIdOffice

1
2
3
4
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");

我可以在一个SQL statement中全部4行都使用insert吗?


在SQL Server 2008中,可以使用单个SQL INSERT语句插入多行。

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

有关这方面的参考,请参阅MOC课程2778A-在SQL Server 2008中编写SQL查询。

例如:

1
2
3
4
5
6
7
INSERT INTO MyTable
  ( Column1, Column2, Column3 )
VALUES
  ('John', 123, 'Lloyds Office'),
  ('Jane', 124, 'Lloyds Office'),
  ('Billy', 125, 'London Office'),
  ('Miranda', 126, 'Bristol Office');


如果要插入到单个表中,可以这样编写查询(可能只在MySQL中):

1
2
3
4
5
6
INSERT INTO table1 (FIRST, LAST)
VALUES
    ('Fred', 'Smith'),
    ('John', 'Smith'),
    ('Michael', 'Smith'),
    ('Robert', 'Smith');


注意:此答案适用于SQL Server 2005。对于SQL Server 2008及更高版本,有许多更好的方法,如其他答案所示。

可以将"插入"与"全选联合"一起使用:

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

但只适用于小数据集,这对于您的4条记录来说应该是很好的。


使用VALUES语法的INSERT语句可以插入多行。为此,请包含多个列值列表,每个列值都用括号括起来,并用逗号分隔。

例子:

1
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);