如何将随机数的参数传递给mysql过程?

如何将随机数的参数传递给mysql过程?,mysql,Mysql,我有这样一个程序 CREATE DEFINER=`root`@`localhost` PROCEDURE `insert_work`( IN `work_id` INT, IN `session_id` INT, IN `work_session_id` VARCHAR(1024), IN `work_name` VARCHAR(1024), IN `agents_coolddown_period_secs` FLOAT ) LANGUAGE SQL NO

我有这样一个程序

CREATE DEFINER=`root`@`localhost` PROCEDURE `insert_work`(
    IN `work_id` INT,
    IN `session_id` INT,
    IN `work_session_id` VARCHAR(1024),
    IN `work_name` VARCHAR(1024),
    IN `agents_coolddown_period_secs` FLOAT
)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
INSERT INTO `gmdb`.`work` (`work_id`, `session_id`, `work_session_id`, `work_name`, `agents_coolddown_period_secs`) VALUES (work_id, session_id, work_session_id, work_name, agents_coolddown_period_secs);
END
如果我这样称呼它

CALL insert_work(1, 2, 121, "", 3);
cmd.Parameters.AddWithValue($"@{tmpData.Key}", tmpData.Value);
它可以工作,但是如果(例如:)像这样
调用insert\u工作(1,2,121)我得到一个错误

System.ArgumentException: Parameter 'agents_coolddown_period_secs' not found in the collection.
   at MySql.Data.MySqlClient.MySqlParameterCollection.GetParameterFlexible(String parameterName, Boolean throwOnNotFound)
   at MySql.Data.MySqlClient.StoredProcedure.GetAndFixParameter(String spName, MySqlSchemaRow param, Boolean realAsFloat, MySqlParameter returnParameter)
   at MySql.Data.MySqlClient.StoredProcedure.CheckParameters(String spName)
   at MySql.Data.MySqlClient.StoredProcedure.Resolve(Boolean preparing)
   at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
   at MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery()
   at TV_DP_DBWrapper.Model.TV_DP_DBInsertWork.Execution()
我要求当我在C代码中使用过程时,我希望让用户只使用他们拥有的那些参数。如果他们只有前三个,那就好了。无论如何,每个参数的名称如下所示

CALL insert_work(1, 2, 121, "", 3);
cmd.Parameters.AddWithValue($"@{tmpData.Key}", tmpData.Value);
过程也知道这些名称,而且表中的这些值都有默认值,所以只按名称获取给定的参数和未给定的参数并填充默认值有什么问题


另外,如果没有这样的选项,我知道我需要为每个可能的场景提供一个覆盖过程,或者强制用户传递默认值,对吗?

MySQL不支持可选参数。并且不支持重写。