對於存儲過程或者函數,有時有這樣的一個需求,傳遞一個參數,輸出一個結果。如:我傳遞一個帳號,返回這個帳號所擁有的權限。可是若是這個需求改了,我要傳遞少許的複數個帳號,獲取這些帳號權限,可是帳號的個數不限定,則此時須要用關鍵字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