检查约束SQL

时间:2015-04-16 10:03:56

标签: sql sql-server sql-server-2008

表格中有2列 -

[SendDate]和[PayDate]

我正在尝试实施一个约束,该约束将检查 - 如果尚未发送产品,则无法付款。

基本上用简单的话来说,如果SendDate是NULL,那么PayDate不能包含某个值或类似的东西                            如果SendDate为NULL,那么如果用户输入PayDate的内容,则会出现错误

我不知道如何继续下去。

非常感谢任何建议,谢谢

1 个答案:

答案 0 :(得分:2)

使用像这样的Check约束

CHECK( [PayDate] IS NULL OR ([PayDate] IS NOT NULL AND [SendDate] IS NOT NULL))

<强>示例

CREATE TABLE dbo.Payment
(
    [Id] INT IDENTITY(1,1) PRIMARY KEY,
    [SendDate] DATE NULL,
    [PayDate] DATE NULL,
    CONSTRAINT CHK_PayDate CHECK( [PayDate] IS NULL OR ([PayDate] IS NOT NULL AND [SendDate] IS NOT NULL))
)

-- All Fine
INSERT INTO dbo.Payment([SendDate],[PayDate]) VALUES(CURRENT_TIMESTAMP,CURRENT_TIMESTAMP);
INSERT INTO dbo.Payment([SendDate],[PayDate]) VALUES(CURRENT_TIMESTAMP,NULL);
INSERT INTO dbo.Payment([SendDate],[PayDate]) VALUES(NULL,NULL);

--Raises Error
INSERT INTO dbo.Payment([SendDate],[PayDate]) VALUES(NULL,CURRENT_TIMESTAMP);