2016-06-27 2 views
1

Node.jsを使用してSQL Serverテーブルにデータを送信しています。コードにはforループがあり、これは関数を呼び出し、insert文を実行します(最終的にストアドプロシージャになります)。 foorループは一連のオブジェクトを日付順に実行します。ほとんどの場合、insert文は正しい順序で終了しますが、エントリの一部が間違っています。Javascriptで正しい順序でデータを入力する方法は?

データベース内の日付の順序が、私がそれらを(時系列に)呼び出すのと同じ順序であることを保証する方法はありますか?私はT-SQLでSORTについて知っていますが、私はプログラムが正しい順序でそれを行うべきだと思います。スレッドスリープとタイマーはできるだけ避けるように常に聞いてきましたので、私はsetTimeoutのアイデアは好きではありません。おそらく、イベントハンドリングの別の方法がありますか?

下記のコード例。 jsonArrayの要素は、日付キーと他のいくつかの数字を持つ単一のオブジェクトです。 SQL Serverテーブルには、プライマリキーの整数が自動インクリメントされています。日付を日付順に並べ替えることで、プライマリキーと日付を順番に並べ替えることができます。

また、SQL操作用にMSSQLインポートを使用しています。

// Main class 
for (let j = 0; j < jsonArray.length; j++) { 
    let myObj = jsonArray[j] 
    WriteToDB.myWriteFunction(myObj) 
} 

// Different class  
const sql = require('mssql') 
let request = new sql.Request() 
let query = (...) 

function myWriteFunction() { 
    request.query(query) // Just the actual insert statement, no issue here 
    request.on('error', function (err) { 
     console.log('REQ ERROR') 
     console.dir(err) 
    }) 
// These dates are out of order, due to when the done event is triggered 
    request.on('done', function() { 
     console.log('QUERY RAN FOR ' + e1) 
    }) 
} 
+1

データベースのレコードの順序が重要なのはなぜですか?主キーはソートメカニズムとしてではなく、レコードの一意の識別子として意図されています。 – McHat

+0

OCD以外に理由はないと思います。私はこれを引き起こしている何らかのマルチスレッドを想定しています。私はそれが渡された順序ですべてのデータを入力するC#で同様のプログラムを持っていた。私はそれに合ってみたいと思っていました。また、学ぶことを試みる。 – AmishJohn81

答えて

1

私はそれらのデータベース操作を非同期で実行されている。この

を引き起こしているマルチスレッドのそのいくつかの並べ替えを想定していますし、それらはすべて同じスレッドで起こります。 D1(第1のデータベース操作)がD2(第2のデータベース操作)より長くなり、D2の後にD1が挿入されると問題になりますが、マルチスレッドには問題はありません。

本当に重要なのは、SQLの順序を本当に信じていない限り、私は完全に蛇のコードサンプルを使用しないことをお勧めします。 req1は、req1が終了した後にのみ実行されます。=>無駄な時間

let jsonArray = [1,2,3,4]; 
if (checkArray(jsonArray)) { 
    createReq(jsonArray[0]) 
} 
function createReq(req) { 
    new Promise((resolve, reject) => { 
    setTimeout(() => { 
     resolve(); 
     jsonArray.shift(); 
     console.log(req); 
     if (checkArray(jsonArray)) { 
     createReq(jsonArray[0]) 
     } 
    }, 100) 
    }) 
} 
function checkArray(arr) { 
    return (jsonArray && jsonArray[0]) 
} 
+0

私は自分の道の光/誤りを見ました。私はあなたのコードを使用しませんが、今どのように可能かを見ています。ありがとうございました! – AmishJohn81

関連する問題