0

我不确定如何将字符串请求格式化为 edge-sql 以执行需要参数的存储过程。如果我将存储过程更改为不使用参数而只是发送exec sp_III_UpdateOperMgr它会正确执行。

下面是我在 edge-sql 中使用的返回错误的语法

“找不到存储过程 'sp_III_UpdateOperMgr @quoteNumber,@poNumber'。”

var updateOpMgrSql  = edge.func('sql',{
    connectionString: GM_CONNECTION_STRING,
    source:function () {
        /*
         exec sp_III_UpdateOperMgr  @quoteNumber,@poNumber
         */
    },
});

下面是正确执行的 MS SQL Server Management Studio 中使用的语法 exec sp_III_UpdateOperMgr @quoteNumber='121715JM-1',@innovationJobNumber='999999'

4

3 回答 3

0

I got it to work for me. This syntax works as well. You don't have to write the parameters in the sql code. You only need to include them in the javascript parameters as you will see below. Here is my stored procedure:

create procedure [dbo].[p_Test]
    @p nvarchar(max) = null
as
begin 
    select * from [registration].[User] 
    where UserName = @p
end

You can swap out the table and parameter in the example above to suit your particular database. Here is my edge code:

var getUser = edge.func('sql', function () {
    /*
    exec [dbo].[p_Test] 
    */
});

getUser({p:'SomeUserName'}, function (error, result) {
    if (error) throw error;
    console.log(result);
});
于 2019-05-23T16:51:27.763 回答
0

假设存储过程本身的参数是@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);
});
于 2015-12-18T14:00:42.913 回答
0

我不知道是否有更好的方法,但我最终编辑了 JavaScript 正在使用的 C 清晰代码。我必须在 SP 名称之后的第一个空白处添加一个拆分,然后获取数组中的第一项这将是过程的实际名称。

在它包含仅需要 SP 名称时传递的所有参数之前 commandString.Substring(5).TrimEnd()

在我通过在第一个空格上拆分字符串来获得数组中的第一项之后 commandString.Substring(5).Split(' ')[0].TrimEnd()

async Task<object> ExecuteStoredProcedure( string connectionString, string commandString, IDictionary<string, object> parameters) { using (SqlConnection connection = new SqlConnection(connectionString)) { var spName = commandString.Substring(5).Split(' ')[0].TrimEnd(); SqlCommand command = new SqlCommand(spName, connection) { CommandType = CommandType.StoredProcedure }; using (command) { return await this.ExecuteQuery(parameters, command, connection); } } }

于 2015-12-18T17:08:33.360 回答