创建表时如何添加默认约束?SQL Server [关闭]


12

我正在尝试创建一个新表,其中包含各列及其后的约束,如下所示。

Create tblTest(
columns..
..
..
Gender int,
Constraint DF_tblTest_Gender Default 3 For Gender,
..
..
..
)

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

'for'附近的语法不正确


您可能需要查看该CREATE TABLE ...语句的官方Microsoft SQL Server文档。您有一个非常基本的语法错误。
John又名hot2use

Answers:


20

您可以内联命名约束:

CREATE TABLE tblTest(
  --
  --
  Gender int CONSTRAINT DF_tblTest_Gender DEFAULT 3,
  --
) ;

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 )   
}

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


我想命名我的约束,如果我以内联方式完成约束,那将是不可能的。有没有不使用内联或更改表语句的方法。
Dhruv Raj

4
@DhruvRaj-这个答案可能显示
Martin Smith

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;

这显示默认约束的名称是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;

结果:

在此处输入图片说明

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

在此处输入图片说明


2

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

Create tblTest(
columns..
..
..
Gender int CONSTRAINT constraint_name DEFAULT 3,
..
..
..
)

或使用ALTER TABLE:

ALTER TABLE tblTest
ADD CONSTRAINT constraint_name 
DEFAULT 3
FOR Gender

我想命名我的约束,如果我以内联方式完成约束,那将是不可能的。有没有不使用内联或更改表语句的方法。
Dhruv Raj 2016年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.