如何在SQL Server中插入10万行数据?

41
INSERT INTO pantscolor_t (procode, color, pic) 
VALUES
('74251', 'Black', '511black.jpg'),
('74251', 'OD Green', '511odgreen.jpg'),
('74251', 'Black', '511black.jpg'),
('74251', 'OD Green', '511odgreen.jpg'),
('74251', 'Black', '511black.jpg'),
('74251', 'OD Green', '511odgreen.jpg'),
..........
..........
..........

INSERT INTO pantscolor_t (procode,color,pic)
VALUES
('74251', 'Charcoal', '511charcoal.jpg'),
('74251', 'Charcoal', '511charcoal.jpg'),
('74251', 'Charcoal', '511charcoal.jpg'),
('74251', 'Charcoal', '511charcoal.jpg'),
.............
.............
.............

 INSERT INTO........................
 INSERT INTO........................
 INSERT INTO........................
 INSERT INTO........................

我有100000行数据,但是我的插入语句超过了1000行。当我在SSMS中运行SQL语句时,出现错误:

插入语句中的行值表达式数量超过了最大允许的1000个行值。

5个回答

32

另一个解决方案是使用带有union的选择查询。

INSERT INTO pantscolor_t (procode,color,pic)
SELECT '74251', 'Black', '511black.jpg'
UNION ALL SELECT '74251', 'OD Green', '511odgreen.jpg'
UNION ALL SELECT '74251', 'Black', '511black.jpg'
UNION ALL SELECT '74251', 'OD Green', '511odgreen.jpg'
UNION ALL SELECT '74251', 'Black', '511black.jpg'
UNION ALL SELECT '74251', 'OD Green', '511odgreen.jpg'
--etc....

UNION ALL被用来代替UNION,以加快在处理数千条记录时的查询速度。UNION ALL允许重复行存在,而UNION会确保结果集中不存在重复值。在这种情况下,我们不想删除任何可能的重复项,因此使用UNION ALL


23

创建CSV文件(或具有定义的字段分隔符和行分隔符的某些文件),并使用“BULK INSERT”选项将文件加载到数据库中。文件可以具有100,000行;使用批量上传不会出现任何加载大型文件的问题。

http://msdn.microsoft.com/en-us/library/ms188365.aspx


1
从代码中,您可以使用SqlBulkCopy类。请参考链接:http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx - Andomar
那么我猜;将其转换为csv文件应该很容易。 - Bala
你还可以使用 bcp.exebcp mytable in data.txt -S (local) -d mydatabase -T -c (-T 表示使用可信连接,-c 表示字符数据,适用于制表符分隔的文件。你可以通过 bcp --help 查看其他选项,例如使用 -t 来指定字段分隔符,-r 来指定行分隔符,以防数据不是以制表符分隔或制表符分隔)。 - endo64

21
INSERT mytable (col1, col2, col3, col4, col5, col6)
SELECT * FROM (VALUES
('1502577', '0', '114', 'chodba', 'Praha', 'Praha 1'),
('1503483', '0', 'TVP', 'chodba', 'Praha', 'Praha 2'),
/* ... more than 1000 rows ... */
('1608107', '0', '8', 'sklad', 'Tlumačov', 'Tlumačov'),
('1608107', '0', '9', 'sklad', 'Tlumačov', 'Tlumačov')
) AS temp (col1, col2, col3, col4, col5, col6);

在循环中构建查询时非常有用。成功了!谢谢。 - LamND7
救命稻草,谢谢! - Edson Medina
谢谢!这里有一些参考资料 表值构造函数 - Pato

10

通过执行以下步骤,您不应该会有任何错误:

INSERT INTO pantscolor_t (procode,color,pic) VALUES ('74251','Black','511black.jpg')

INSERT INTO pantscolor_t (procode,color,pic) VALUES ('74251', 'OD Green', '511odgreen.jpg')

INSERT INTO pantscolor_t (procode,color,pic) VALUES ('74251', 'Black', '511black.jpg')

INSERT INTO pantscolor_t (procode,color,pic) VALUES ('74251', 'OD Green', '511odgreen.jpg')

INSERT INTO pantscolor_t (procode,color,pic) VALUES ('74251', 'Black', '511black.jpg')

...........

我尝试了一下,它有效了,当然你也可以使用 Excel 轻松地连接这些值。


4
这个过程会相当缓慢。 - Wassauf Khalid

0

创建一个csv文件 out.csv 等等
然后使用以下代码:

BULK INSERT 
FROM 'C:\out.csv'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
GO

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接