2012-12-13 9 views
8

Ho una tabella foo, che ha una colonna NOT NULL con un predefinito chiamato message:inserimento predefinita nella colonna non nullo se il valore è nullo

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

Esiste una procedura memorizzata bar che si innestano nei foo:

Si può vedere, devo ramificare condizionatamente in modo che il mio inserto di utilizzare l'impostazione predefinita se i_message è nullo. Va bene per una sola colonna, ma considera se foo avesse molte più colonne NOT NULL DEFAULT - la sintassi sarebbe troppo pesante.

Esiste una sintassi che posso utilizzare per specificare che un valore inserito deve tornare all'impostazione predefinita se null? Ho provato i seguenti errori di sintassi, ma comprensibilmente ottenuto:

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

risposta

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

Brilliant! Grazie. –

+0

Com'è possibile nel server MSSQL? – user1844205

+0

@ user1844205: mi batte, non uso mai MSSQL, ricerca i documenti di MSSQL o pesco la domanda qui su SO. – Wrikken

Problemi correlati