创建表时如何添加默认约束?数据库服务器

Dhr*_*Raj 13 sql-server constraint sql-server-2016

我正在尝试创建一个新表,其中的列后跟它们的约束,如下所示。

Create tblTest(
columns..
..
..
Gender int,
Constraint DF_tblTest_Gender Default 3 For Gender,
..
..
..
)
Run Code Online (Sandbox Code Playgroud)

但是,我在默认约束附近收到一条错误消息,

'for' 附近的语法不正确

ype*_*eᵀᴹ 24

您可以内联命名约束:

CREATE TABLE tblTest(
  --
  --
  Gender int CONSTRAINT DF_tblTest_Gender DEFAULT 3,
  --
) ;
Run Code Online (Sandbox Code Playgroud)

正如CREATE TABLEmsdn 页面所示:

DEFAULT

... 为了保持与早期版本的 SQL Server 的兼容性,可以将约束名称分配给DEFAULT.

在同一个页面,我们可以发现,对于唯一的选择<table_constraint>PRIMARY KEYFOREIGN KEYCHECK限制:

< table_constraint > ::=  
  [ CONSTRAINT constraint_name ]   
{  
   { PRIMARY KEY | UNIQUE }  
       {   
         NONCLUSTERED (column [ ASC | DESC ] [ ,... n ])  
         | NONCLUSTERED HASH (column [ ,... n ] ) 
               WITH ( BUCKET_COUNT = bucket_count )   
       }   
    | FOREIGN KEY   
        ( column [ ,...n ] )   
        REFERENCES referenced_table_name [ ( ref_column [ ,...n ] ) ]   
    | CHECK ( logical_expression )   
}
Run Code Online (Sandbox Code Playgroud)

因此,如果您想添加默认约束(命名或不命名),唯一的方法是内联或使用ALTER TABLE语句进行。

  • @DhruvRaj - 正如这个答案所示,这是可能的 (4认同)

Han*_*non 8

您对其他两个答案的评论声称在创建“内联”时不能命名默认约束。这两个答案都表明,实际上,您可以在内联创建约束时为其提供名称。我将添加第三个示例,显示结果。

IF OBJECT_ID('dbo.Test') IS NOT NULL
DROP TABLE dbo.Test;
CREATE TABLE dbo.Test
(
    TestID int NOT NULL
        CONSTRAINT PK_Test --here I'm naming the primary key constraint!
        PRIMARY KEY CLUSTERED
        IDENTITY(1,1)
    , SomeData varchar(42) NOT NULL
        CONSTRAINT DF_Test_SomeData --this is the name of the default constraint!
        DEFAULT ('Carrie Fisher')
);

INSERT INTO dbo.Test DEFAULT VALUES;
Run Code Online (Sandbox Code Playgroud)

这显示默认约束的名称是DF_Test_SomeData

SELECT TableName = t.name
    , ConstraintName = dc.name
FROM sys.default_constraints dc
    INNER JOIN sys.tables t ON dc.parent_object_id = t.object_id;
Run Code Online (Sandbox Code Playgroud)

结果:

在此处输入图片说明

查看 SSMS 中的对象资源管理器显示名称:

在此处输入图片说明


McN*_*ets 4

default value您可以在字段定义上使用。

Create tblTest(
columns..
..
..
Gender int CONSTRAINT constraint_name DEFAULT 3,
..
..
..
)
Run Code Online (Sandbox Code Playgroud)

或者使用更改表:

ALTER TABLE tblTest
ADD CONSTRAINT constraint_name 
DEFAULT 3
FOR Gender
Run Code Online (Sandbox Code Playgroud)