8
我有一個表foo
,其中有一個NOT NULL
列有一個默認的名爲message
:插入默認爲NOT NULL列,如果值爲null
CREATE TABLE foo(
id int PRIMARY KEY,
message varchar(64) NOT NULL DEFAULT 'Hello'
)
有一個存儲過程bar
是插入到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;
你可以看到,我必須有條件地分支,以便我的插入使用默認值,如果爲空。對於只有一列來說很好,但考慮foo
還有更多NOT NULL DEFAULT
列 - 語法會變得笨拙。
是否有我可以用來指定插入的值應該回落到默認值,如果爲空的語法?我嘗試以下,但可以理解了語法錯誤:
INSERT INTO foo (id, message) VALUES (i_id, COALESCE(i_message, DEFAULT));
INSERT INTO foo (id, message) VALUES (i_id, IFNULL(i_message, DEFAULT));
輝煌!謝謝。 –
這在MSSQL服務器中可能如何? – user1844205
@ user1844205:擊敗我,從不使用MSSQL,搜索MSSQL的文檔或在SO上提出問題。 – Wrikken