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 KEY,FOREIGN KEY和CHECK限制:
Run Code Online (Sandbox Code Playgroud)< 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;
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 中的对象资源管理器显示名称:
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)
| 归档时间: |
|
| 查看次数: |
32519 次 |
| 最近记录: |