SQL Server在单个insert语句中可以插入的最大行数
我想做一个批量插入,类似于这个问题SQL Server在单个insert语句中可以插入的最大行数,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我想做一个批量插入,类似于这个问题 SQL Server对单个insert语句中可以插入多少行的限制是什么 例如,当插入第一个值但第二个值导致主键冲突时会发生什么情况。所有INSERT语句是否回滚 使用insert-INTO。。。值…即 INSERT INTO TableName( Colum1) VALUES (1), (2), (3),...... upto 1000 rows. 但如果您使用SELECT语句在表中插入行,则没有限制,例如 INSERT IN
INSERT
语句是否回滚使用
insert-INTO。。。值…
即
INSERT INTO TableName( Colum1)
VALUES (1),
(2),
(3),...... upto 1000 rows.
但如果您使用SELECT语句在表中插入行,则没有限制,例如
INSERT INTO TableName (ColName)
Select Col FROM AnotherTable
现在进入第二个问题。插入过程中发生错误时会发生什么情况
如果使用多值构造插入行
INSERT INTO TableName( Colum1)
VALUES (1),
(2),
(3)
在上述场景中,如果任何行插入导致错误,则整个语句将回滚,并且不会插入任何行
但是如果您插入的行中每一行都有一个单独的语句,即
INSERT INTO TableName( Colum1) VALUES (1)
INSERT INTO TableName( Colum1) VALUES (2)
INSERT INTO TableName( Colum1) VALUES (3)
在上述情况下,每个行插入都是一个单独的语句,如果任何行插入导致错误,则只回滚特定的插入语句,其余语句将成功插入 尽管最大值为1000,但已经证明,性能开始以更小的数字下降。尤金·菲利波夫(Eugene Philipov)写了一篇伟大的文章,探讨了这个主题:
总而言之,作者做了一些精心设计的实验,并在25左右找到了一个最佳点。YMMV.您实际上可以使用子查询传入无限数量的记录
;WITH NewData AS (SELECT * FROM ( VALUES (1, 'A'),(2,'B'),(3,'C')) x (Id, SomeName))
INSERT INTO TableName (Column1, Column2) SELECT Id, SomeName FROM NewData
你可以试试这个
with tempDataTable AS (SELECT *From (VALUES
(18001,79626,'1992-12-11','1993-12-11') -- this is data u want to insert
)x(empNO,sal,frmDate,toDate)) -- tempDataColoumns
INSERT INTO salaries(emp_no,salary,from_date,to_date) SELECT empNO,sal,frmDate,toDate from newData
在查询时删除“---”有一个简短的解决方法,可以避免行限制,并且仍然将其视为一条语句(全部进入,或者如果有一个错误,则全部回滚)
如果您必须询问,那么您可能应该使用批量插入。我想你的问题的答案可以通过谷歌搜索找到。是的,我想到了,但是由于系统中的某些限制,批量插入不是一个有效的选项
插入值限制为1000,但是可以用,至于SQL world中的第二个问题,绝大多数语句都是要么全有要么全无。如果您在回答中包含一个指向文档的链接,其中每个插入1000行的限制是很好的。。值
被写入:…错误消息是:“INSERT语句中的行值表达式数超过了允许的最大1000行值数。”请看我下面的答案,看看如何轻松添加1000多行。有什么方法可以超过1000行的限制并使其达到100000行?非常有趣。谢谢你的链接。
with tempDataTable AS (SELECT *From (VALUES
(18001,79626,'1992-12-11','1993-12-11') -- this is data u want to insert
)x(empNO,sal,frmDate,toDate)) -- tempDataColoumns
INSERT INTO salaries(emp_no,salary,from_date,to_date) SELECT empNO,sal,frmDate,toDate from newData
INSERT INTO tbl_name (a,b)
SELECT 1,2 UNION ALL
SELECT 1,3 UNION ALL
SELECT 1,4 .......