我有一个带有 col1 和 col2 的 sql 表,我想创建一个约束或触发器(无论工作如何),当且仅当 col1 中输入的值为 1 时,col2 才应从 NULL 更改为 Not Null。
关键是,如果 col1 设置为 1,我想强制 col2 字段,否则保持可选。
我有一个带有 col1 和 col2 的 sql 表,我想创建一个约束或触发器(无论工作如何),当且仅当 col1 中输入的值为 1 时,col2 才应从 NULL 更改为 Not Null。
关键是,如果 col1 设置为 1,我想强制 col2 字段,否则保持可选。
您在评论中提到了 SQL Server
CREATE TABLE YourTable
(
Col1 INT,
Col2 VARCHAR(25) NULL,
CONSTRAINT ck_foo CHECK (NOT (Col1 = 1 AND Col2 IS NULL))
);
NULL
如问题中所述,将不允许。为了也不允许空字符串,约束定义可以是
CONSTRAINT ck_foo CHECK (NOT (Col1 = 1 AND ISNULL(Col2,'') = ''))
ALTER TABLE YourTable WITH CHECK ADD CONSTRAINT [CK_YourTable] CHECK (([col1]=(1) AND [col2] IS NOT NULL OR [col1]<>(1)))
GO
如果您也想排除空字符串,那么:
ALTER TABLE YourTable WITH CHECK ADD CONSTRAINT [CK_YourTable] CHECK (([col1]=(1) AND ( [col2] IS NOT NULL AND [col2] <> '') OR [col1]<>(1)))
GO