对于存储过程或者函数,有时有这样的一个需求,传递一个参数,输出一个结果。如:我传递一个帐号,返回这个帐号所拥有的权限。可是若是这个需求改了,我要传递少许的复数个帐号,获取这些帐号权限,可是帐号的个数不限定,则此时须要用关键字IN,并将帐号集合传递给存储过程或函数。实现的过程以下: 对表oasys_dept,有以下的数据:sql
须要输入参数id(INT形式),调用存储过程获得结果。 MYSQL实现(使用方法find_in_set):函数
DELIMITER $$ CREATE PROCEDURE query_company(IN cname_in VARCHAR(100), OUT result_out INT) BEGIN SELECT count(*) INTO result_out FROM oasys_dept where find_in_set(id, cname_in); END $$ DELIMITER ;
调用存储过程sqlserver
set @ids='1,2'; set @recordcount=0; CALL query_company(@ids, @recordcount); SELECT @recordcount;
结果:3d
这里id是INT类型的,那若是换成字符串类型,我是否是须要像sqlserver同样传递'key1','key2'这样带有多对单引号格式的参数呢?这里把参数由主键集合改为dept_name集合试试:code
DELIMITER $$ CREATE PROCEDURE query_company(IN cname_in VARCHAR(100), OUT result_out INT) BEGIN SELECT count(*) INTO result_out FROM oasys_dept where find_in_set(dept_name, cname_in); END $$ DELIMITER ;
调用存储过程:server
set @ids='家里蹲有限公司,野鸡公司'; set @recordcount=0; CALL query_company(@ids, @recordcount); SELECT @recordcount;
效果同样。也就是说,实际操做的时候,不须要传递'key1','key2'这样格式的参数给存储过程,而是'key1,key2'这样的格式,这种形式彷佛与sqlserver略不一样。blog