以下results.length始终为0,而行明确更新。
exports.get=function(request,response){
var mssql=request.service.mssql;
var sql="declare @tableId table(id nvarchar(255)); update mytable set myfield=1 output inserted.id into @tableId where id=(select top 1 id from mytable where myfield is null order by date); select id from @tableId;";
mssql.query(sql, {
success:function(results){
if(results.lentgh==1)
response.send(statusCodes.OK, results[0]);
else
response.send(statusCodes.OK,null);
}
});
});
答案 0 :(得分:1)
传递给mssql.query
函数的SQL命令有两个语句:update和select。每个语句都会生成一个“结果”(对成功回调的调用)。由于您在获得第一个结果时发送了响应,并且它是更新调用的结果(不会“返回”任何内容),因此即使更新了某些内容,您的API也始终会返回空响应。
另一个问题是,您在得到结果的长度方面有一个错字:正确的是length
,而在您的代码中,您有lentgh
。由于这是JavaScript,因此将被解释为undefined(0),并且永远不会执行“if”子句。
尝试使用下面的代码替换代码,并且应该在进行更新时开始看到响应。
exports.get = function(request, response) {
var mssql=request.service.mssql;
var sql="declare @tableId table(id nvarchar(255)); update mytable set myfield=1 output inserted.id into @tableId where id=(select top 1 id from mytable where myfield is null order by date); select id from @tableId;";
var firstResponse = true;
mssql.query(sql, {
success : function(results) {
if (firstResponse) {
// result from the update call, can ignore
firstResponse = false;
} else {
if(results.length == 1) {
response.send(statusCodes.OK, results[0]);
} else {
response.send(statusCodes.OK,null);
}
}
}
});
};