仅在UPDATE上的SQL NULL约束

时间:2012-04-18 20:04:20

标签: sql database tsql constraints

是否有办法对表中的列进行约束,该列不允许在UPDATES上使用NULLS?插入时仍应允许Null。

由于

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

  1. 将列标记为NOT NULL
  2. 添加DEFAULT值。
  3. 创建INSTEAD OF INSERT触发器以替换插入的空值 使用默认值。
  4. 这应该符合所有要求。


    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
    

答案 3 :(得分:0)

我会尝试执行一个触发器来检查更新以查看该字段是否为NULL。