仅更新时的SQL NULL约束

仅更新时的SQL NULL约束,sql,database,tsql,constraints,Sql,Database,Tsql,Constraints,有没有一种方法可以对表中不允许更新为null的列设置约束?插入时仍应允许Null 谢谢否,您必须使用触发器或任何其他机制单独处理逻辑否,您必须使用触发器或任何其他机制单独处理逻辑您尝试过使用onupdate触发器吗?您正在使用事务(tsql),因此这应该是一个可能的解决方案。据我所知,检查约束不能仅限于更新查询。您是否尝试过使用onupdate触发器?您正在使用事务(tsql),因此这应该是一个可能的解决方案。据我所知,检查约束不能仅限于更新查询 将列标记为非空 添加一个默认值 创建一个而不是I

有没有一种方法可以对表中不允许更新为null的列设置约束?插入时仍应允许Null


谢谢

否,您必须使用触发器或任何其他机制单独处理逻辑

否,您必须使用触发器或任何其他机制单独处理逻辑

您尝试过使用onupdate触发器吗?您正在使用事务(tsql),因此这应该是一个可能的解决方案。据我所知,检查约束不能仅限于更新查询。

您是否尝试过使用onupdate触发器?您正在使用事务(tsql),因此这应该是一个可能的解决方案。据我所知,检查约束不能仅限于更新查询

  • 将列标记为
    非空
  • 添加一个
    默认值
  • 创建一个
    而不是INSERT
    触发器来替换插入的空值 使用默认值
  • 这应符合所有要求


  • 将列标记为
    非空
  • 添加一个
    默认值
  • 创建一个
    而不是INSERT
    触发器来替换插入的空值 使用默认值
  • 这应符合所有要求



    我会尝试执行一个触发器,在更新时检查字段是否为空。

    我会尝试执行一个触发器,在更新时检查字段是否为空。

    是。问题是我的ERP系统位于数据库顶部,它只显示约束错误消息,而不显示触发错误消息。是的。问题是我的ERP系统位于数据库顶部,它只显示约束错误消息,而不显示触发错误消息。hmmm。问题是,我的ERP系统位于数据库顶部,它只显示约束错误消息,而不显示触发错误消息。hmmm。问题是,我的ERP系统位于数据库顶部,它只会显示约束错误消息,而不会显示触发错误消息。
    CREATE TABLE Client
    (
        ClientId int, 
        OptionalOnInsert int NOT NULL DEFAULT(0),
        Field1 int, 
        Field2 int
    )
    GO
    
    CREATE TRIGGER TR_Client_InsteadOfInsert ON Client
    INSTEAD OF INSERT
    AS
        INSERT Client (ClientId, OptionalOnInsert, Field1, Field2)
        SELECT ClientId, OptionalOnInsert, Field1, Field2
        FROM INSERTED
        WHERE OptionalOnInsert is not null
    
        INSERT Client (ClientId, Field1, Field2)
        SELECT ClientId, Field1, Field2
        FROM INSERTED
        WHERE OptionalOnInsert is null
    GO
    
    -- Inserting NULL succeeds
    INSERT Client (ClientId, OptionalOnInsert)
    VALUES (1, NULL)
    
    -- Updating to NULL fails
    UPDATE Client
    SET OptionalOnInsert = NULL
    WHERE ClientId = 1