小弟需要写一个存储过程,判断8个参数是否存在两两相等的参数:
CREATE PROCEDURE sp_JudgeValid
@iPara1 INT,
@iPara2 INT,
@iPara3 INT,
@iPara4 INT,
@iPara5 INT,
@iPara6 INT,
@iPara7 INT,
@iPara8 INT
AS
BEGIN
IF ( @iPara1 = @iPara2 OR @iPara1 = @iPara3
OR @iPara1 = @iPara4 OR @iPara1 = @iPara5
OR @iPara1 = @iPara6 OR @iPara1 = @iPara7
OR @iPara1 = @iPara8
OR @iPara2 = @iPara3 OR @iPara2 = @iPara4
OR @iPara2 = @iPara5 OR @iPara2 = @iPara6
OR @iPara2 = @iPara7 OR @iPara2 = @iPara8
OR @iPara3 = @iPara4 OR @iPara3 = @iPara5
OR @iPara3 = @iPara6 OR @iPara3 = @iPara7
OR @iPara3 = @iPara8
OR @iPara4 = @iPara5 OR @iPara4 = @iPara6
OR @iPara4 = @iPara7 OR @iPara4 = @iPara8
OR @iPara5 = @iPara6 OR @iPara5 = @iPara7 OR @iPara5 = @iPara8
OR @iPara6 = @iPara7 OR @iPara6 = @iPara8
OR @iPara7 = @iPara8)
BEGIN
RETURN 0
END
ELSE
RETURN 1
END
END
但是我觉得这样写代码没什么意思,如果参数再多几个,那就更麻烦了。
不知道各位兄弟是否有好点的技巧,说出来大家讨论讨论~
解答如下:(再oracle中只需在每个select 中加入from dual即可)
CREATE PROCEDURE sp_JudgeValid
@iPara1 INT,
@iPara2 INT,
@iPara3 INT,
@iPara4 INT,
@iPara5 INT,
@iPara6 INT,
@iPara7 INT,
@iPara8 INT
AS
BEGIN
if (select count(1)
from
(select @iPara1 as col union select @iPara2 union select @iPara3 union select @iPara4
union select @iPara5 union select @iPara6 union select @iPara7 union select @iPara8)T)<8
BEGIN
RETURN 0
END
ELSE
RETURN 1
END
END