1

mssql を使用して、node.js で sql server 2012 に接続しています。ドキュメントで一括挿入オプションを発見しました

一時テーブルにデータを挿入したいのですが、ドキュメントにはそれができると書かれています。ここに私がしようとしているものがあります:

createConnection(config.dbConfig);
    var table = new sql.Table('#atable');
    table.create = true;
    table.columns.add('a', sql.Int, { nullable: false});
    table.rows.add(1);
    table.rows.add(2);
    table.rows.add(3);
    var request = new sql.Request();
    request.bulk(table, function(err, rowCount){
       if(err){
           console.log('bulk insert error');
           console.log(err);
       } 
        var taco = new sql.Request();
        taco.query('select * from #atable', function(err, recordset){
           if(err){
               console.log('taco error:' + err);
           } 
           console.log('taco recordset:');
           console.log(recordset);
        });
    });

私はこの出力を得る:

taco エラー:RequestError: 無効なオブジェクト名 '#atable'。

ハッシュを削除すると、サーバー上に実際のテーブルが作成されます。実際に一時テーブルを使用している例は見つかりません。これを行う方法を知りたいです。そうでない場合は、別のアプローチを取る必要があります

4

1 に答える 1

2

通常の sql ステートメントに切り替えて一時テーブルを作成し、クエリを実行しようとしました。私が気付いたのはnew sql.Request、私の問題のほとんどでした。一時テーブルが別の接続/リクエスト/スレッドに存在しません。

これが私の解決策でした:

var table = new sql.Table('#atable');
    table.create = true;
    table.columns.add('a', sql.Int, { nullable: false});
    table.rows.add(1);
    table.rows.add(2);
    table.rows.add(3);
    var request = new sql.Request();
    request.bulk(table, function(err, rowCount){
       if(err){
           console.log('bulk insert error');
           console.log(err);
           return;
       } 

        request.query('select * from #atable', function(err, recordset){
       if(err){
           console.log('taco error:' + err);
           return;
       } 
       console.log('taco recordset:');
       console.log(recordset);
    });
    });

微妙な変化です。request.bulk 呼び出し内では、同じ要求オブジェクト (スマートな名前の要求) を使用してテーブルをクエリしました。新しい接続オブジェクトを作成していなかったので、テーブルが存在しない接続を使用していたことに気づきませんでした。

于 2015-04-15T18:38:18.950 に答える