在nodejs上使用mssql模块执行批量导入时出现语法错误

时间:2016-09-02 09:39:23

标签: sql-server node.js

我正在使用mssqlhttps://www.npmjs.com/package/mssql#bulk)模块来处理MSSQL数据库。

我的批量插入代码:

sql.connect("mssql://"+userName+":"+password+"@"+url).then(function() {
    var table = new sql.Table(tableName); // or temporary table, e.g. #temptable 
    table.rows.add("oto@test.com", "123");
    console.log("Table obj: "+JSON.stringify(table));
    var request = new sql.Request();
    request.bulk(table, function(err, rowCount) {
        if (err){
            return callback("Error during executing a query: " + err);
        }
        return callback(null);
    });
}).catch(function(err) {
        console.log("Error during DB connection: "+err);
});

它说Error during executing a query: Syntax error near ')'

从模块文档中提供的示例中,我已经省略了表创建,因为我的表已经存在。也许这会导致它,但当我包含这样的东西时:

table.create = false;
table.columns.add('EmailAddress', sql.VarChar(255), {nullable: false, primary: true});
table.columns.add('DataSourceId', sql.VarChar(50), {nullable: false});

它给出了另一个错误:

Error during executing a query: RequestError: Invalid column type from bcp clien
t for colid 2.

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

回答我自己的问题,以防其他人遇到同样的问题。

首先,语法错误并不能真正指向正确的方向。我已经发现,即使您不想创建新表,也需要定义表列。

然后我收到了这个错误:

Error during executing a query: RequestError: Invalid column type from bcp client for colid 2.

那是因为在JS代码中我说DataSourceId列不能为空,但实际上我在MSSQL上创建的表说它可以为null。意思是不匹配,因此错误。

工作代码:

function insertToDb(tableName, contactData, callback){
    var userName = "foo";
    var password = "foo";
    var url = "foo";
    sql.connect("mssql://"+userName+":"+password+"@"+url).then(function() {
        var table = new sql.Table(tableName);
        table.create = false;
        table.columns.add('EmailAddress', sql.NVarChar(255), {nullable: false, primary: true});
        table.columns.add('DataSourceId', sql.NVarChar(50), {nullable: true});
        table.rows.add("oto@test.com", "123");

        var request = new sql.Request();
        request.bulk(table, function(err, rowCount) {
            if (err){
                return callback("Error during executing a query: " + err);
            }
            return callback(null);
        });
    }).catch(function(err) {
            console.log("Error during DB connection: "+err);
    });
}