Sql server Can';t弄清楚使用edge sql的参数调用存储过程的语法
我不知道如何格式化对边缘sql的字符串请求,以便执行需要参数的存储过程。如果我将存储过程更改为不使用参数,只发送Sql server Can';t弄清楚使用edge sql的参数调用存储过程的语法,sql-server,edge.js,Sql Server,Edge.js,我不知道如何格式化对边缘sql的字符串请求,以便执行需要参数的存储过程。如果我将存储过程更改为不使用参数,只发送exec sp_III_updatepermgr,它将正确执行 下面是我在edge sql中使用的返回错误的语法 “找不到存储过程'sp_III_updatePermgr' @“枚举器,@poNumber.” 以下是MS SQL Server Management Studio中正确执行的语法 exec sp_III_updatePermgr@quoteNumber='121715J
exec sp_III_updatepermgr
,它将正确执行
下面是我在edge sql中使用的返回错误的语法
“找不到存储过程'sp_III_updatePermgr'
@“枚举器,@poNumber.”
以下是MS SQL Server Management Studio中正确执行的语法
exec sp_III_updatePermgr@quoteNumber='121715JM-1',@innovationJobNumber='9999'
假设存储过程本身中的参数是@quoteNumber和@poNumber,您可以尝试:
var updateOpMgrSql = edge.func('sql',{
connectionString: GM_CONNECTION_STRING,
source:function () {
/*
exec sp_III_UpdateOperMgr @quoteNumber=@quoteNumberParam,@poNumber=@poNumberParam
*/
},
});
然后使用以下命令调用updateOpMgrSql函数:
updateOpMgrSql({ quoteNumberParam: 10, poNumberParam: 15 }, function (error, result) {
if (error) throw error;
console.log(result);
});
我不知道是否有更好的方法,但我最终编辑了JavaScript使用的C sharp代码。我必须在SP名称后的第一个空格上添加一个拆分,然后获取数组中的第一个项,这将是过程的实际名称 在此之前,它包括仅需要SP名称时传递的所有参数
commandString.Substring(5.TrimEnd)()
通过在第一个空白处拆分字符串来获取数组中的第一项之后
commandString.Substring(5).Split(“”)[0].TrimEnd()
异步任务执行程序(
字符串连接字符串,
字符串命令字符串,
(字典参数)
{
使用(SqlConnection连接=新的SqlConnection(connectionString))
{
var spName=commandString.Substring(5).Split(“”)[0].TrimEnd();
SqlCommand=newsqlcommand(spName,connection)
{
CommandType=CommandType.StoredProcess
};
使用(命令)
{
return等待。ExecuteQuery(参数、命令、连接);
}
}
}
我让它为我工作。这种语法也适用。您不必在sql代码中写入参数。您只需要将它们包含在javascript参数中,如下所示。以下是我的存储过程:
create procedure [dbo].[p_Test]
@p nvarchar(max) = null
as
begin
select * from [registration].[User]
where UserName = @p
end
您可以交换上面示例中的表和参数以适合您的特定数据库。
这是我的边缘代码:
var getUser = edge.func('sql', function () {
/*
exec [dbo].[p_Test]
*/
});
getUser({p:'SomeUserName'}, function (error, result) {
if (error) throw error;
console.log(result);
});
看起来它是在2013年加入的。如果不需要参数,该过程也可以工作。那么您如何调用updateOpMgrSql呢?类似于
updateOpMgrSql({quoteNumber:10,poNumber:15}…
?是的。函数updateOpmgr(){var deferred=Q.defer();updateOpMgrSql({quoteNumber:'121715JM-1',poNumber:'999999'},函数(err,result){if(err){winston.log('error',err);返回deferred.reject(err)}deferred.resolve(true);});return deferred.promise;}
var getUser = edge.func('sql', function () {
/*
exec [dbo].[p_Test]
*/
});
getUser({p:'SomeUserName'}, function (error, result) {
if (error) throw error;
console.log(result);
});