Sql-Server
創建表時如何添加預設約束?SQL 伺服器
我正在嘗試創建一個新表,其中的列後跟它們的約束,如下所示。
Create tblTest( columns.. .. .. Gender int, Constraint DF_tblTest_Gender Default 3 For Gender, .. .. .. )
但是,我在預設約束附近收到一條錯誤消息,
‘‘for’ 附近的語法不正確’
您可以將約束命名為內聯:
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 中的對象資源管理器會顯示名稱: