当前位置: 首页 > 面试题库 >

如果值为null,则将default插入不为null的列

闻人英韶
2023-03-14
问题内容

我有一个表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为null)。仅一列就可以了,但是请考虑是否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));

问题答案:
  INSERT INTO foo (id, message) 
  VALUES
  (i_id, IFNULL(i_message,DEFAULT(message)));


 类似资料:
  • 所以我有了这个数据表 正如您所看到的,如果值为null,则获取前一个值,但是如果您查看第三行,我将获得一个null,我假设是因为它获取了第二行的值,但是当它仍然没有更新时(因此仍然是来自原始dataframe的null)。 我有点不知道该怎么做。有人帮忙吗?

  • 问题内容: 我有以下映射 我如何配置我的Mapper或Mappings,以便当childId为null时,将目标Entity.child设置为null而不是Entity.child.id? 问题答案: 对于我来说,找到的不是一个非常优雅的解决方案,而是可行的解决方案。 首先将接口更改为抽象类,然后添加

  • 我已经连接表与一个 新娘模型: 计划模型: 我有一个查询将这些数据返回到endpoint。 一切都很好,除了一件事。在婚宴桌上,一些身份证上没有计划。因此,当我返回数据时,一些带有一个空的数组。 我想阻止这种情况。如果没有计划,那么我不想返回该新娘id。在这里我如何才能实现我想要的?

  • 默认情况下,MapStruct将NullValueMappingStrategy作为RETURN_NULL。我的要求是,当source为null时,我需要抛出一个NPE,类似于lombok的@nonnull的工作方式。

  • 我想要两个表上的连接,如果值为NULL,则复制左连接行为,如果值为NOULL,则复制内连接行为。例如,对于表: 该联接将返回一行值(根据左联接)。对于表格: 不会返回任何行(根据内部联接)。对于表格: 将返回值为的单行(根据两种联接类型)。 最有效的方法是什么? 编辑:作为效率最大化的一部分,我正在寻找一个不进行后期筛选的查询(即使用子句)。

  • Hy, 我为数据库创建了以下3个表: ); 我有以下存储过程 C#代码: 但在我将数据插入使用上述代码的表单后,我得到了以下错误: 无法将值NULL插入列User_Id...... PLATFORM. MDF. dbo. Buyer;列不允许空值。INSERT失败。 无法将值NULL插入列Type_Id,表... PLATFORM. MDF. dbo. User;列不允许空值。INSERT失败。