2014-10-05 57 views
0

我有這個DDL:有沒有辦法可以創建一個約束來檢查SQL Server中兩列的值?

CREATE TABLE [dbo].[AdminTest] (
    [AdminTestId] INT   IDENTITY (1, 1) NOT NULL, 
    [Title]  NVARCHAR (100) NOT NULL, 
    [CreatedBy] INT   NOT NULL, 
    [CreatedDate] DATETIME  NOT NULL, 
    [ModifiedBy] INT   NOT NULL, 
    [ModifiedDate] DATETIME  NOT NULL, 
    [TestLevelId] INT   NOT NULL, 
    [TestStatusId] INT   NOT NULL, 
    [ExamId]  INT   NOT NULL, 
    [Text]   NVARCHAR (MAX) NULL, 
    [Sequence]  INT   DEFAULT ((1)) NOT NULL, 
    [Release]  NVARCHAR (50) DEFAULT ((1)) NOT NULL, 
    [Version]  ROWVERSION  NOT NULL, 
    [Price]  MONEY   DEFAULT ((0)) NOT NULL, 
    [ReleaseDate] DATETIME  NULL, 
    [Code]   VARCHAR (10) DEFAULT (LEFT(newid(), (5))) NOT NULL 
); 

有,我可以要求ReleaseDate有一個值,如果Release列的值是2的方法嗎?

+4

檢查SQL SERVER中的約束 – 2014-10-05 10:08:58

+1

請參閱http://stackoverflow.com/questions/26201578/how-can-i-require-a-minimum-number-of-characters-in-a-column-with-sql-server – 2014-10-05 10:13:01

+0

這可能表示事物未正確建模。 – 2014-10-05 12:43:04

回答

0

雖然ALTER:

ALTER TABLE AdminTest 

ADD CONSTRAINT DF_Check CHECK (Release=2) ; 

雖然創造

CREATE TABLE ADMIN(
Release int 
    CONSTRAINT DF_Check CHECK (Release=2) 
) 
0

您也可以在線定義檢查約束爲列約束,這樣的 -

CREATE TABLE [dbo].[AdminTest] (
    [AdminTestId] INT   IDENTITY (1, 1) NOT NULL, 
    [Release]  NVARCHAR (50) DEFAULT ((1)) NOT NULL, 
    [ReleaseDate] DATETIME NULL CONSTRAINT CK_Release CHECK (Release='2') , 
    [Code]   VARCHAR (10) DEFAULT (LEFT(newid(), (5))) NOT NULL 
);   
+0

如果它引用多個列,則不適用。 – 2014-10-05 12:40:36

3

是:

alter table dbo.AdminTest 
add constraint CK_AdminTest_VerifyReleaseAndDate CHECK (Release = N'2' AND ReleaseDate IS NOT NULL OR Release <> N'2'); 
相關問題