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

时间:2013-04-17 05:01:31

标签: php sql sql-server sql-server-2008

我有一个PHP项目,我必须在SQL表中插入超过10,000行。这些数据来自一个表格,并检查了一些简单的条件,并在每个月末插入第二个表格。

我该怎么做。

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

什么是最合适的。

  1. 目前正在使用PHP的Cronjob
  2. 导出到文件和BULK导入方法
  3. 某种直接转移的存储过程
  4. 或任何其他。

5 个答案:

答案 0 :(得分:3)

使用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)."')");

答案 1 :(得分:2)

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

另外,(以防你真的没有索引)你可能还想考虑添加一个索引 - 一些索引(大多数是主键上的索引)可以提高插入的性能。

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

答案 2 :(得分:2)

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

检查那500个批次的状况,到那时,准备另一批500并插入第一批等处理。

这不会给你的sql server加载负载。

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

答案 3 :(得分:1)

它很简单,你可以使用多个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)");
}

这应该可以正常工作

答案 4 :(得分:1)

SQL Server不会在一个批处理中插入超过1000条记录。您必须创建单独的批处理以进行插入。在这里,我建议一些可以帮助你的替代方案。

创建一个存储过程。为有效数据创建两个临时表,为无效数据创建另一个临时表。逐个检查所有规则和验证,并根据这两个表插入数据。

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

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

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

感谢。