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));
Brilliant! Dziękuję Ci. –
Jak to jest możliwe w serwerze MSSQL? – user1844205
@ user1844205: bije mnie, nigdy nie używa MSSQL, przeszukuje dokumenty MSSQL lub pyta tutaj na SO. – Wrikken