2010-03-28 55 views
1

我有一個表與主鍵(ColumnA,ColumnB)。我想創建一個函數或過程,當傳遞兩個整數時,會在表中插入一行,但要確保最大的整數始終進入ColumnA,而較小的整數進入ColumnB。設置主鍵與兩個整數

因此,如果我們有SetKeysWithTheseNumbers(17,19)將返回

|-----------------| 
|ColumnA | ColumnB| 
|-----------------| 
|19  | 17  | 
|-----------------| 

SetKeysWithTheseNumbers(19,17)將返回同樣的事情

|-----------------| 
|ColumnA | ColumnB| 
|-----------------| 
|19  | 17  | 
|-----------------| 

回答

3

使用:

INSERT INTO your_table 
    (COLUMN_A, COLUMN_B) 
VALUES(GREATEST(@param_a, @param_b), 
     LEAST(@param_a, @param_b)) 

參考:

+0

這就是我一直在尋找的單詞。我無法弄清楚相當於最大值和最小值。 – 2010-03-28 03:20:05

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 ; 
+0

這似乎是伎倆,謝謝。我以爲我會使用兩個插入語句,而不是分配n3,n4。 – 2010-03-28 02:41:36

0

你可以嘗試triggers

BEFORE UPDATE事件
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 ; 

重複。