Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server Can';t弄清楚使用edge sql的参数调用存储过程的语法_Sql Server_Edge.js - Fatal编程技术网

Sql server Can';t弄清楚使用edge 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

我不知道如何格式化对边缘sql的字符串请求,以便执行需要参数的存储过程。如果我将存储过程更改为不使用参数,只发送
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);
});