0

有没有办法对表中的列进行约束,在 UPDATES 上不允许 NULLS?插入时仍应允许空值。

谢谢

4

4 回答 4

3

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

于 2012-04-18T20:06:30.377 回答
0

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

于 2012-04-19T17:41:45.793 回答
0
  1. 将列标记为NOT NULL
  2. 添加一个DEFAULT值。
  3. 创建一个INSTEAD OF INSERT触发器以将插入的空值替换为默认值。

这应该满足所有要求。


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
于 2012-04-18T21:55:57.810 回答
0

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

于 2012-04-18T20:09:58.230 回答