在SQL Server 中有5 种约束:
1)主关键字约束(Primary Key Constraint)
2)外关键字约束(Foreign Key Constraint)
3)惟一性约束(Unique Constraint)
4)检查约束(Check Constraint)
5)非null约束其中主关键字,外关键字,检查约束都可以通过添加CONSTRAINT的方式显式的添加,那么请问,not null和unique这两种约束,是否也可以显式的通过constraint添加呢?
CREATE TABLE StockAdjustment
(VideoCode SmallInt not null,
 AdjustmentQty Int,
 DateAdjusted DateTime,
 WhoAdjust nvarchar(20),
 AdjustReason nvarchar(50),
 CONSTRAINT Con_VideoCode CHECK (VideoCode BETWEEN 0 AND 99999))
例如以上代码中的VideoCode,是否可以像下面的check那样,通过constraint显式添加呢?

解决方案 »

  1.   

    not null貌似可以.
    但是unique则不行,因为unique可以含有空.而有空,则一般不能做为外键.
      

  2.   

    create table test
    (
      id int,
      testname varchar(50),
      sex bit,
      class varchar(50),
      score float default(0)
      constraint pk_test primary key/*这里可以指定是创建聚集或非聚集索引clustered|nonclustered可选项*/(id)
      constraint ix_test unique(testname)
      constraint ck_test check/*这里可以使用 not for replication可选项,用于指定当从其他表中复制数据时,不检查约束条件*/(score>=0)
    )
      go
      

  3.   

    多谢楼上大侠的热心解答,只是,not null貌似还是不可以啊
      

  4.   

    楼主添加的这个是表级约束.
    not null 是列级约束,直接写在列定义后面,逗号前面.
    create table tb(id int not null,col varchar(10))unique 约束也可以用于列级和表级,添加方式与 Primary key 类似:
    列级:
    create table tb(id int unique)表级:
    create table tb(id int,col nvarchar(10),contraint UQ_tb unique(id,col)表级约束写在列的定义后面,与列定义之间加分隔号,用contraint引导.
      

  5.   

    后面少写了个括号:
    create table tb(id int,col nvarchar(10),contraint UQ_tb unique(id,col))