存储过程30个参数,实际使用时传入数量不定,怎么办?

natfit 2014-01-16 06:37:15
C#,用mysql.data.dll,6.8.3版本(6.7.4也一样)

如果用cmd.Prepare(),直接弹出parameter不够的错误,

不用就等下execute时出错。

才从mssql转过来,不太懂。

ignoreprepare=false;
...全文
429 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
natfit 2014-03-16
  • 打赏
  • 举报
回复
最后我下了mysql的源码,在它添加parameter的地方进行了修改,如果没有 ,直接加了个默认值,顺便把mssql的@也改掉了
wwwwb 2014-01-17
  • 打赏
  • 举报
回复
在SP中定义30个参数,赋初值,进行判断,字符串累加生成SQL语句,再执行
码无边 2014-01-17
  • 打赏
  • 举报
回复
写存储过程的时候,判断各个参数是否存在,前提是给个默认值
ACMAIN_CHM 2014-01-17
  • 打赏
  • 举报
回复
这个没有办法,在C#程序进行判断吧。然后传入一些空参数。MYSQL端无法实现变参数。
知道就是你 2014-01-17
  • 打赏
  • 举报
回复
引用 3 楼 natfit 的回复:
拼不太现实,我要考虑到速度,并发等,而且还有内部逻辑,需要在服务器上完成,即使我在客户端拼好,服务器上执行也会很慢的。 另外问一下,mysql能支持100G的数据库吗?
想说的这样,不在程序中判断就需要在数据库中判断 ,拼接条件是不能避免的! MYSQL数据库容量理论上没有限制,取决于数据库服务器机器的操作系统对文件大小的限制决定的,与MYSQL本身没有直接关系!
natfit 2014-01-16
  • 打赏
  • 举报
回复
拼不太现实,我要考虑到速度,并发等,而且还有内部逻辑,需要在服务器上完成,即使我在客户端拼好,服务器上执行也会很慢的。 另外问一下,mysql能支持100G的数据库吗?
知道就是你 2014-01-16
  • 打赏
  • 举报
回复
参照存储过程如下 : CREATE PROCEDURE ps_yddl_get_gyjx_jgm_d(IN ps_jgm char(8) CHARACTER SET utf8, IN ps_ywbh varchar(20) CHARACTER SET utf8, IN ps_gybh varchar(350) CHARACTER SET utf8, IN ps_ksrq varchar(10) CHARACTER SET utf8, IN ps_jsrq varchar(10) CHARACTER SET utf8, IN ps_start int(11), IN ps_limit int(11), IN ps_pxfs int(11)) COMMENT '柜员天绩效情况查询' BEGIN DECLARE ps_sqlwhere VARCHAR(200) default ' '; DECLARE ps_order VARCHAR(50); SET ps_sqlwhere = concat(' where rq between "', ps_ksrq, '" and "', ps_jsrq,'"'); CALL splitString(ps_gybh, "-"); CASE ps_pxfs WHEN '3' THEN SET ps_order = ' order by rq ASC ,dgytjid ASC'; WHEN '2' THEN SET ps_order = ' order by ywl DESC ,dgytjid ASC '; ELSE SET ps_order = ' order by pjfwsj ASC ,dgytjid ASC '; END CASE; IF (ps_jgm != 'all') THEN SET ps_sqlwhere = concat(ps_sqlwhere, ' and jgm = ', ps_jgm); END IF; IF (ps_ywbh != 'all') THEN SET ps_sqlwhere = concat(ps_sqlwhere, ' and ywbh = ', ps_ywbh); END IF; IF (ps_gybh != 'all') THEN SET ps_sqlwhere = concat(ps_sqlwhere, ' and gybh in (select * from tmp_split) '); END IF; SET @ps_sqltotal = concat('select count(*) into @total from jx_dgy_tj ', ps_sqlwhere); SET @ps_sqltext = concat('select dgytjid, jgm, gybh, gyxm, ywbh, ywl, zgpf, zdpf, pjpf, zdfwsj, zcfwsj, pjfwsj, fwsjpm, ywlpm, rq, xq, wdmc,@total as total from jx_dgy_tj ', ps_sqlwhere, ps_order, ' limit ', ps_start, ',', ps_limit); PREPARE stmt FROM @ps_sqltotal; execute stmt; PREPARE stmt2 FROM @ps_sqltext; execute stmt2; END
知道就是你 2014-01-16
  • 打赏
  • 举报
回复
MYSQL 动态SQL + 预处理 语句即可 ,中间的变量可以使用if 判断,如果有值,则使用concat 追加为条件 。

56,678

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧