如何向 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 ... SELECT
msdn.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 行的主要内容,如果未能解决你的问题,请参考以下文章