วิธีเพิ่มข้อ จำกัด เริ่มต้นขณะสร้างตาราง SQL Server [ปิด]


12

ฉันพยายามสร้างตารางใหม่ที่มีคอลัมน์ตามด้วยข้อ จำกัด ดังที่แสดงด้านล่าง

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

อย่างไรก็ตามฉันได้รับข้อความแสดงข้อผิดพลาดใกล้กับข้อ จำกัด เริ่มต้นว่า

'ใกล้ไวยากรณ์ที่ไม่ถูกต้อง' สำหรับ ''


คุณอาจต้องการดูเอกสาร Microsoft SQL Server อย่างเป็นทางการสำหรับCREATE TABLE ...คำสั่ง คุณมีข้อผิดพลาดทางไวยากรณ์ขั้นพื้นฐานมาก
John aka hot2use

คำตอบ:


20

คุณสามารถตั้งชื่ออินไลน์ข้อ จำกัด :

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คำสั่ง


ฉันต้องการตั้งชื่อข้อ จำกัด ของฉันซึ่งเป็นไปไม่ได้ถ้าฉันทำแบบอินไลน์ มีวิธีโดยไม่ใช้ inline หรือแก้ไขคำสั่งตาราง
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;

ผล:

ป้อนคำอธิบายรูปภาพที่นี่

เมื่อมองหา Object explorer ใน 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

ฉันต้องการตั้งชื่อข้อ จำกัด ของฉันซึ่งเป็นไปไม่ได้ถ้าฉันทำแบบอินไลน์ มีวิธีโดยไม่ใช้ inline หรือแก้ไขคำสั่งตาราง
Dhruv Raj
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.