【问题标题】:Insert default into not null column if value is null如果值为空,则将默认值插入非空列
【发布时间】:2012-12-01 19:12:12
【问题描述】:

我有一个表foo,它有一个NOT NULL 列,默认名为message

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;

您可以看到,如果i_message 为空,我必须有条件地分支以便我的插入使用默认值。这对于一列来说很好,但考虑一下 foo 是否有更多 NOT NULL DEFAULT 列 - 语法会变得笨拙。

我是否可以使用一种语法来指定插入的值如果为 null 则应回退到默认值?我尝试了以下但可以理解的语法错误:

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

【问题讨论】:

    标签: mysql


    【解决方案1】:
      INSERT INTO foo (id, message) 
      VALUES
      (i_id, IFNULL(i_message,DEFAULT(message)));
    

    【讨论】:

    • 这在 MSSQL 服务器中怎么可能?
    • @user1844205:打败我,永远不要使用 MSSQL,搜索 MSSQL 的文档,或者在 SO 上提问。
    猜你喜欢
    • 2019-03-09
    • 2013-05-19
    • 2016-08-12
    • 2017-12-25
    • 1970-01-01
    • 2016-01-31
    • 2017-06-17
    • 2015-02-13
    • 1970-01-01
    相关资源
    最近更新 更多