繁体   English   中英

使用节点按块顺序将记录批量插入 SQL Server

[英]Bulk Insert Records To SQL Server Sequentially chunk by chunk using Node

我正在尝试使用节点顺序将多条记录插入到 SQL Server,我之前实际上已经实现了这一点,但忘记了我是如何做到的。

我有一个 excel 表,其中包含超过 20,000 条记录(文件类型为 xlsx)。 我已将其转换为二维数组字符串。 由于有许多行和列,我需要以块的形式上传(一个块中最多 1000 条记录),以确保不会发生 SQL Server 超时。 它以前有效。 但是当我尝试再次重新编写代码时,它没有按预期工作。

我目前的代码:

function insertAll(rows){
var chunk_Size=1000;
var Query="Insert into Table1 (City,Country) ";
var Exec_Query=Query;
for(var i=0;i<rows.length;i++){
   if(i%chunk_Size==0 || i+1==rows.length)
   {
      Exec_Query=Exec_Query+" ('"+rows[i][0]+"','"+rows[i][1]+"');";
      sql.executeQuery(Exec_Query).then(result => {
         if(result["status"]=="ok"){
            console.log("Inserted for "+(i/chunk_Size));
         }
      }
   }
   else{
      Exec_Query=Exec_Query+" ('"+rows[i][0]+"','"+rows[i][1]+"'), ";
   }
}

当上传一个包含 11301 条记录的文件时。

预期输出:

Inserted for 1
Inserted for 2
Inserted for 3
Inserted for 4
Inserted for 5
Inserted for 6
Inserted for 7
Inserted for 8
Inserted for 9
Inserted for 10
Inserted for 11
Inserted for 12

现在输出:

Inserted for 11.301
Inserted for 11.301
Inserted for 11.301
Inserted for 11.301

并且只会插入几条记录

我想我必须在 for 循环(Just Assuming)或类似的东西中同步执行才能实现这一点。 你能帮我么。

提前致谢。

正如我在评论中提到的,您有一个异步问题。 您可以通过创建一个函数来执行异步位并在循环中调用该函数来强制它同步使用循环变量。 然后外部变量的值是静态的,当异步sql.executeQuery返回时,您会得到您期望的值:

var chunk_Size=1000;
var Query="Insert into Table1 (City,Country) ";
var Exec_Query=Query;

function doInsert(chunk_num) {
      sql.executeQuery(Exec_Query).then(result => {
         if(result["status"]=="ok"){
            console.log("Inserted for "+(chunk_num/chunk_Size));
         }
      }
}

for(var i=0;i<rows.length;i++){
   if(i%chunk_Size==0 || i+1==rows.length)
   {
      Exec_Query=Exec_Query+" ('"+rows[i][0]+"','"+rows[i][1]+"');";
      doInsert(i);
   }
   else{
      Exec_Query=Exec_Query+" ('"+rows[i][0]+"','"+rows[i][1]+"'), ";
   }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM