在明确更新该行的同时,以下result.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); } }); });
传递给该mssql.query函数的SQL命令具有两个语句:更新和选择。这些语句中的每一个都会生成一个“结果”(对成功回调的调用)。由于您是在获得第一个结果时发送响应的,而这是update调用的结果(不会“返回”任何内容),因此即使更新了某些内容,您的API也会始终返回空响应。
mssql.query
另一个问题是您在获取结果的长度时有错别字:正确的是length,而在代码中则是lentgh。由于这是JavaScript,因此它将被解释为未定义(0),并且“ if”子句将永远不会执行。
length
lentgh
尝试用下面的代码替换该代码,并且在进行更新时应该开始看到响应。
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); } } } }); };