2012-12-13 11 views
8

Mam tabeli foo, który ma kolumnę NOT NULL z domyślnie nazywa message:Wstaw domyślny do not null kolumny, jeśli wartość jest null

CREATE TABLE foo(
    id int PRIMARY KEY, 
    message varchar(64) NOT NULL DEFAULT 'Hello' 
) 

Istnieje procedura przechowywana bar że wstawia się foo:

CREATE PROCEDURE bar(
    i_id int, 
    i_message varchar(64) 
) 
BEGIN 

    -- other logic 

    IF i_message IS NOT NULL THEN 
     INSERT INTO foo (id, message) VALUES (i_id, i_message); 
    ELSE 
     INSERT INTO foo (id, message) VALUES (i_id, DEFAULT); 
     -- could also be: INSERT INTO foo (id) VALUES (i_id); 
    END IF; 
END; 

Widzisz, muszę warunkowo rozgałęzić, aby moja wstawka użyła wartości domyślnej, jeśli i_message ma wartość null. W porządku dla jednej kolumny, ale rozważmy, czy jeśli foo miałoby więcej kolumn NOT NULL DEFAULT - składnia byłaby nieporęczna.

Czy istnieje składnia, której można użyć do określenia, że ​​wstawiona wartość powinna wrócić do wartości domyślnej, jeśli jest pusta? Próbowałem następujących, ale ze zrozumiałych względów dostał błędy składni:

INSERT INTO foo (id, message) VALUES (i_id, COALESCE(i_message, DEFAULT)); 
INSERT INTO foo (id, message) VALUES (i_id, IFNULL(i_message, DEFAULT)); 

Odpowiedz

19
INSERT INTO foo (id, message) 
    VALUES 
    (i_id, IFNULL(i_message,DEFAULT(message))); 
+0

Brilliant! Dziękuję Ci. –

+0

Jak to jest możliwe w serwerze MSSQL? – user1844205

+0

@ user1844205: bije mnie, nigdy nie używa MSSQL, przeszukuje dokumenty MSSQL lub pyta tutaj na SO. – Wrikken

Powiązane problemy