当前位置:  开发笔记 > 编程语言 > 正文

在单个SQL查询中插入多行?

如何解决《在单个SQL查询中插入多行?》经验,为你挑选了4个好方法。

我有一组数据要一次插入,比如4行.

我的表有三列:Person,IdOffice.

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");

我可以Person在一个单独的所有4行Id



1> BinaryMisfit..:

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

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

有关参考,请参阅MOC课程2778A - 在SQL Server 2008中编写SQL查询.

例如:

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


请注意,一个insert语句中的最大行数为1000.
这应该是措辞"一个`VALUES`子句中的最大行数是1000".这不是`INSERT`语句,限制为1000行.
我知道这个问题和答案都很陈旧,但我想提一下,使用问题中提到的方法与本答案之间存在功能差异.第一个执行触发X次,插入表中有1个记录.第二个执行触发1次,插入的表中有x个记录.假设您使用批量插入使触发器正常工作,使第二种方法成为性能的最佳选择.
这不适用于SQL Server 2005,请参阅http://stackoverflow.com/questions/2624713/how-do-i-insert-multiple-rows-without-repeating-the-insert-into-dbo-blah-part
@ahnbizcad T-sql中的分号通常是可选的,但据报道它们将来是必需的.您应该养成使用它们来终止每个语句的习惯 - 您的代码看起来也会更好IMO.

2> too much php..:

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

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


从SQL Server 2008开始,如果用单引号替换双引号,这将起作用.
也适用于postgres v9.0
并使用SQLite
只有SQLite 3.7.11以上版本.如果您无法保证,请使用此处显示的UNION方法:http://stackoverflow.com/a/5009740/841830
Muneem,每个INSERT语句的限制为1,000 VALUE行.

3> DavGarcia..:

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

您可以在SELECT UNION ALL中使用INSERT:

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

仅适用于小型数据集,对于您的4条记录应该没问题.



4> 小智..:

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

例:

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


@ mt-head我有一个为什么我想要的例子,并且会给你2个理由.我插入到具有数据完整性检查触发器的表中.原因1 - 单独插入值会违反完整性检查,从而回滚事务并返回错误.我使用的SQL Server不支持延迟约束,所以即使不是触发器它也是常规约束,它仍然无法工作.原因2 - 完整性检查是一个昂贵的过程,我宁愿让它执行一次而不是每次事务1000次.我还在寻找解决方案.
一个更好的问题是你为什么要这样做?为什么不在一批中一起运行清洁4命令.如果一行失败,您的批次将失败.如果你把他们单独组合在一起3成功.
推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有