Я столкнулся с «Передано слишком много параметров» в хранимую процедуру при попытке запустить хранимую процедуру в NodeJs с помощью mssql.
Код:
//This computerName is what we'll find in our mssql server to see
//if the server entry exist or not and the stored procedure will take this as a parameter.
var computerName = "some.fake.server.com";
var secProfile = "";
//Logic
// If computerName passed is valid and not null.
//if (computerName != "") {
var sql = require('mssql');
var config = {
user: 'dbuser',
password: 'secure9ass',
server: 'dbserver.domain.com',
database: 'DBName',
pool: {
max: 10,
min: 0,
idleTimeoutMillis: 30000
}
}
sql.connect(config).then(function(output) {
// Stored Procedure
new sql.Request()
.input("ComputerName", sql.VarChar(100), computerName)
.output('sqlOutput', sql.VarChar(1000), "Stored procedure has not run yet!!")
.execute('dbo.getSysStatus_ByName').then(function(recordsets) {
console.dir(recordsets);
}).catch(function(err) {
// ... error checks
console.log('ERROR1::: ' + err)
console.log("----")
console.log(err)
console.log("====")
console.log(recordsets)
console.log("----")
console.log('ERROR2::: '+ sqlOutput);
console.log('ERROR3::: '+ request.parameters.sqlOutput.value);
});
console.log(output);
}).catch(function(err) {
// ... error checks
console.log('ERROR5::: '+ err);
});
Ошибка: в имя процедуры передано слишком много параметров: getSysStatus_ByName
Я проверил в базе данных, что хранимая процедура имеет только один ожидаемый параметр, и этот параметр: ComputerName
Я знаю, что мне не хватает только имени параметра, но я пробовал
.input("@ComputerName", sql.VarChar(100), computerName)
or
.input("computerName", sql.VarChar(100), computerName)
or
.input("computername", sql.VarChar(100), computerName)
Ничего не помогло и выдает ту же ошибку. Кроме того, попытался изменить тип параметра с sql.VarChar(xxx) на sql.Int (в этом случае он выдает ошибку, говоря о недопустимом типе, поэтому я знаю, что sql.VarChar(xxx) это хорошо.
Один из скриптов .vb (visual basic), который успешно работает, имеет следующие строки кода, и он работает. Мне интересно, почему мой код в nodejs дает мне ошибку.
Set objCmd = CreateObject("ADODB.Command")
ObjCmd.ActiveConnection = Conn
ObjCmd.CommandTimeout = 180 'in seconds
ObjCmd.CommandType = 4 'Stored Procedure
ObjCmd.CommandText = "dbo.getSysStatus_ByName"
objCmd.Parameters.Append objCmd.CreateParameter("@ComputerName", 200, 1, 1024, ComputerName)
В соответствии с CreateParameter (справка ADO страница) говорится, что 200 – это # для
adVarChar 200 A string value (Parameter object only).
1 means: direction variable (where 1 is for an Input Parameter in my case) and
1024 is the size of the input variable.
У меня нет VPN-подключения, чтобы попробовать, но я надеюсь, что ошибка не возникает из-за размера 1024 против 1000 (в моем примере кода для строки .input(..)). Завтра протестирую.