如何向 MSSQL 表中插入超过 10000 行

Posted

技术标签:

【中文标题】如何向 MSSQL 表中插入超过 10000 行【英文标题】:How to insert more than 10000 rows to MSSQL Table 【发布时间】:2013-04-17 05:01:30 【问题描述】:

我有一个 php 项目,我必须在一个 SQL 表中插入超过 10,000 行。这些数据是从一个表中取出并检查一些简单的条件,并在每个月底插入到第二个表中。

我该怎么做。

我认为需要进一步澄清。我目前使用 PHP cronjob 进行小批量(250 个插入)传输,它工作正常。但我需要这样做是最合适的方法。

什么是最合适的。

    我目前使用的带有 PHP 的 Cronjob 导出到文件和 BULK 导入方法 某种存储过程可以直接传输

或任何其他。

【问题讨论】:

没什么特别的。只需根据需要插入每一行。月末,运行存储过程或程序进行月末处理。 你可能想使用INSERT ... SELECTmsdn.microsoft.com/en-us/library/ms174335.aspx 最后我用了批处理的方法,效果很好。 【参考方案1】:

使用insert SQL 语句。 :^)

向 SQL Server 2012 中的表或视图添加一行或多行。例如,请参阅Examples。

使用 mssql_* 扩展的示例。

$server = 'KALLESPC\SQLEXPRESS';
$link = mssql_connect($server, 'sa', 'phpfi');
mssql_query("INSERT INTO STUFF(id, value) VALUES ('".intval($id)."','".intval($value)."')");

【讨论】:

@slm,我完全不同意。 insert 是最常用的插入记录方式。 @slm,这是这里的第一条消息。而且我不知道OP的知识水平。无论如何添加了 PHP 示例。【参考方案2】:

由于数据量大,批量处理500条记录。

检查这 500 批的条件,到那时,准备另一批 500 并插入第一批并处理。

这不会给你的 sql server 带来负担。

通过这种方式,我每天处理 40k 条记录。

【讨论】:

10000 行几乎不是 并且不需要将其分解为更小的事务。【参考方案3】:

使用BULK INSERT - 它专为满足您的要求而设计,可显着提高插入速度。

此外,(以防万一您确实没有索引)您可能还需要考虑添加索引 - 一些索引(大多数是主键上的索引)可能会提高插入的性能。

您应该能够插入记录的实际速率将取决于确切的数据、表结构以及 SQL 服务器本身的硬件/配置,因此我无法真正给您任何数字。

【讨论】:

然后我必须将它们导出到文件中。这不会消耗资源(RAM 和处理器)。 是的,它会使用大量的 RAM 和处理器【参考方案4】:

SQL Server 不会在单个批次中插入超过 1000 条记录。您必须为插入创建单独的批次。在这里,我建议一些对您有帮助的替代方案。

创建一个存储过程。创建两个临时表,一个用于有效数据,另一个用于无效数据。一项一项地检查您的所有规则和验证,并根据将数据插入到这两个表中。

如果数据有效,则插入有效临时表,否则插入无效临时表。

现在,接下来使用合并语句,您可以根据需要将所有数据插入到源表中。

您可以在表之间传输 N 条记录,所以我希望这对您来说没问题

谢谢。

【讨论】:

【参考方案5】:

很简单,你可以使用多个while来完成,因为10000行并不是很大的数据!

$query1 = mssql_query("select top 10000 * from tblSource");
while ($sourcerow = mssql_fetch_object($query1))
      mssql_query("insert into tblTarget (field1,field2,fieldn) values ($sourcerow->field1,$sourcerow->field2,$sourcerow->fieldn)");

这应该可以正常工作

【讨论】:

以上是关于如何向 MSSQL 表中插入超过 10000 行的主要内容,如果未能解决你的问题,请参考以下文章

在 nvarchar(max) 字段中插入超过 8000 个字符的 MSSQL

数据批量插入MSSQL

MSSQL SELECT(刚刚)新插入到表中的那条记录

MSSQL之三 在表中操纵数据

MSSQL - 有关插入查询如何运行的问题

如何向表中插入数据以及如何更新删除表中的数据