我正在使用mssql
(https://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.
有什么想法吗?
答案 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);
});
}