我正在尝试创建一个新表,其中包含各列及其后的约束,如下所示。
Create tblTest(
columns..
..
..
Gender int,
Constraint DF_tblTest_Gender Default 3 For Gender,
..
..
..
)
但是,我在默认约束附近收到一条错误消息,因为,
'for'附近的语法不正确
我正在尝试创建一个新表,其中包含各列及其后的约束,如下所示。
Create tblTest(
columns..
..
..
Gender int,
Constraint DF_tblTest_Gender Default 3 For Gender,
..
..
..
)
但是,我在默认约束附近收到一条错误消息,因为,
'for'附近的语法不正确
Answers:
您可以内联命名约束:
CREATE TABLE tblTest(
--
--
Gender int CONSTRAINT DF_tblTest_Gender DEFAULT 3,
--
) ;
如CREATE TABLE
msdn页面所示:
DEFAULT
...为了保持与SQL Server早期版本的兼容性,可以将约束名称分配给
DEFAULT
。
在同一个页面,我们可以发现,对于唯一的选择<table_constraint>
是PRIMARY KEY
,FOREIGN KEY
和CHECK
限制:
< 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
语句。
您对其他两个答案的评论声称,在“内联”创建默认约束时,不能命名默认约束。这两个答案都表明,实际上,可以在内联创建约束时为其提供名称。我将添加第三个示例,显示结果。
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中的对象资源管理器将显示名称:
您可以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
CREATE TABLE ...
语句的官方Microsoft SQL Server文档。您有一个非常基本的语法错误。