我有一个主键表(ColumnA,ColumnB)。我想创建一个函数或过程,当传递两个整数时,会在表中插入一行,但要确保最大的整数始终进入ColumnA,较小的整数进入ColumnB。
因此,如果我们有SetKeysWithTheseNumbers(17,19)将返回
|-----------------|
|ColumnA | ColumnB|
|-----------------|
|19 | 17 |
|-----------------|
SetKeysWithTheseNumbers(19,17)将返回相同的内容
|-----------------|
|ColumnA | ColumnB|
|-----------------|
|19 | 17 |
|-----------------|
答案 0 :(得分:3)
使用:
INSERT INTO your_table
(COLUMN_A, COLUMN_B)
VALUES(GREATEST(@param_a, @param_b),
LEAST(@param_a, @param_b))
参考:
答案 1 :(得分:0)
这是一个商店程序
DELIMITER $$
DROP PROCEDURE IF EXISTS `SetKeysWithTheseNumbers` $$
CREATE PROCEDURE `SetKeysWithTheseNumbers` (
n1 integer,
n2 integer
)
BEGIN
declare n3 integer;
declare n4 integer;
if( n1 > n2 ) then
set n3=n1;
set n4=n2;
else
set n3=n2;
set n4=n1;
end if;
insert into mytable values(n3,n4);
END $$
DELIMITER ;
答案 2 :(得分:0)
您可以尝试triggers:
delimiter //
CREATE TRIGGER greater_ColA_table
BEFORE INSERT ON table
FOR EACH ROW
BEGIN
DECLARE a INTEGER;
IF NEW.ColumnA < NEW.ColumnB THEN
SET a=NEW.ColumnA;
SET NEW.ColumnA=NEW.ColumnB, NEW.ColumnB=a;
END IF;
END //
delimiter ;
重复BEFORE UPDATE
事件。