在我的NightWatch自动化测试中,我需要在测试运行之前将数据保持在正确的状态。要设置它,我需要对MSSQL-2016服务器执行一些存储过程。我使用msnodesqlv8,因为我发现它使用Trusted Connections。我无法使用此驱动程序构建调用存储过程的函数。 我有SELECT语句,例如
GetUserGuid: function(dbName, userName){
var sql = require("msnodesqlv8");
var connectionString = "server=.;Database=" + dbName + ";Trusted_Connection=Yes;Driver={SQL Server Native Client 11.0}";
var query = "SELECT uGUID FROM Users WHERE Name = '" + userName + "'";
return new Promise(function(resolve, reject) {
sql.query(connectionString, query, (err, rows) => {
resolve(rows[0].uGUID);
});
})
}
由于我没有正常工作存储过程调用我为sp语句后续工作函数构建函数。
CreateUser: function(dbName, userName){
var sql = require("msnodesqlv8");
var connectionString = "server=.;Database="+ dbName + ";Trusted_Connection=Yes;Driver={SQL Server Native Client 11.0}";
var guid = uuidv4();
var query = "exec dbo.CreateUser @userId='" + guid + "', @sDescription='" + userName + "'";
return new Promise(function(resolve, reject) {
sql.query(connectionString, query, (err, rows) => {
resolve('user created');
});
})
}
然而它也不起作用。
你有研究员的提示吗?
答案 0 :(得分:1)
所以,解决方案是有问题的,因为我没想到它会如此明显。
在msnodesqlv8包页面上给出的示例实际上有效;)
参数应传递给数组中的过程,而不会转换为期望的类型。
以下是我案例的正确实施。
CreateUser: function(userName){
return new Promise(function(resolve, reject) {
sql.open(settings.ConnectionString, function (err, conn) {
//console.log(conn);
var pm = conn.procedureMgr();
var guid = uuidv4();
pm.callproc('dbo.CreateUser', [guid, userName], function(err, results, output) {
if(err != null){
reject('user create - failed');
}
else{
resolve('user create - succeded');
}
});
});
})
}
答案 1 :(得分:-1)
奇迹般地,调用包含PRINT语句的存储过程将永远无法完成。
所以这些都不要!