Ios Azure移动服务自定义API多次调用SQL SP
我有一个带有自定义API的Azure移动服务,它似乎在进行多个SQL调用。查看日志时,我看到SP返回了多个响应。其中一些是空返回(无记录集),而其中一个正在与SP正确通信并返回记录集 我知道我的iOS应用程序只调用自定义API一次 以下是自定义API:Ios Azure移动服务自定义API多次调用SQL SP,ios,sql,sql-server,azure,azure-mobile-services,Ios,Sql,Sql Server,Azure,Azure Mobile Services,我有一个带有自定义API的Azure移动服务,它似乎在进行多个SQL调用。查看日志时,我看到SP返回了多个响应。其中一些是空返回(无记录集),而其中一个正在与SP正确通信并返回记录集 我知道我的iOS应用程序只调用自定义API一次 以下是自定义API: exports.post = function(request, response) { var mssql = request.service.mssql; var params = [request.query.First
exports.post = function(request, response) {
var mssql = request.service.mssql;
var params = [request.query.FirstName ,
request.query.LastName ,
request.query.DOB ,
request.query.EmailAddress ,
request.query.PhoneNumber ,
request.query.FacilityID ,
request.query.DiagnosisID,
request.query.GeneratedBy ,
request.query.UserTypeID];
console.log("processregistration params = '%j'", params);
var sql = "exec MyStoredProcName ?, ?, ?, ?, ?, ?, ?, ?, ?";
mssql.query(sql, params, {
success: function(results) {
console.log("results = '%j'", results);
// I had to put this in there to keep it from returning an empty recordset
// back to my iOS app
if (results.length > 0) {
response.send(statusCodes.OK, results);
}
}
});
};
以下是日志:
我知道SP只生成一个记录集,测试它直接生成一个记录集。我已经能够帮助它,但是在代码>响应之前放入if语句。发送< /代码>。我以前从来没有这样做过。有什么想法吗
编辑-这是我的SP(为carlosfigueira发布)
您遇到的问题是,您的存储过程正在执行许多中间操作(查询现有用户id、查询正在使用的电子邮件地址等),默认情况下,所有这些操作都由SQL server作为结果集返回,这就是为什么在“实”结果集之前会看到这些空结果集 您可以在存储过程中使用
SET NOCOUNT ON
语句,这将有效地从返回到mssql.query
函数的结果集列表中删除这些中间SQL执行。您的存储过程将如下所示
ALTER PROCEDURE [carlosfigueira].[sp_Process_Registration]
@FirstName VARCHAR(500) ,
@LastName VARCHAR(500) ,
@DOB DATETIME ,
@EmailAddress VARCHAR(500) ,
@PhoneNumber VARCHAR(25) ,
@FacilityID INT ,
@DiagnosisID INT ,
@GeneratedBy NVARCHAR(500) ,
@UserTypeID INT
AS
SET NOCOUNT ON
DECLARE @Timestamp AS DATETIME = CURRENT_TIMESTAMP
-- rest of the stored proc code is the same
添加该语句后,传递给
mssql.query
的回调将只调用一次。这是一个我们已经实施了修复的错误,应该很快得到纠正。不过,这不会在明年之前发生,因为我们在圣诞节和新年的几周内不会进行任何部署(除非存在安全或重大阻止问题,并且您似乎有解决问题的方法)。您是否也可以发布您的存储过程,以便我们验证我们的修复方法是否也适用于您的情况?谢谢添加了SP.Thx的SQL!顺便说一句-我想你是Azure工程团队的一员吧?如果是的话,你知道乔希·特维斯吗?谢谢!是的,我在那个团队工作,乔希是这里的朋友——我想说,是我们这里最好的朋友之一。太棒了。去年在达拉斯CocoaConf与Josh共用一辆出租车。很棒的家伙,也是我现在使用Azure的主要原因!我知道NOCOUNT是做什么的,我只是没有考虑API是如何解释这些消息的。谢谢
ALTER PROCEDURE [carlosfigueira].[sp_Process_Registration]
@FirstName VARCHAR(500) ,
@LastName VARCHAR(500) ,
@DOB DATETIME ,
@EmailAddress VARCHAR(500) ,
@PhoneNumber VARCHAR(25) ,
@FacilityID INT ,
@DiagnosisID INT ,
@GeneratedBy NVARCHAR(500) ,
@UserTypeID INT
AS
SET NOCOUNT ON
DECLARE @Timestamp AS DATETIME = CURRENT_TIMESTAMP
-- rest of the stored proc code is the same