Sql-Server

創建表時如何添加預設約束?SQL 伺服器

  • March 9, 2021

我正在嘗試創建一個新表,其中的列後跟它們的約束,如下所示。

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 TABLEmsdn 頁面所示:

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 中的對象資源管理器會顯示名稱:

在此處輸入圖像描述

引用自:https://dba.stackexchange.com/questions/159357