Làm cách nào để thêm một ràng buộc mặc định trong khi tạo bảng? Máy chủ SQL [đã đóng]


11

Tôi đang cố gắng tạo một bảng mới với các cột theo sau là ràng buộc của chúng như hiển thị bên dưới.

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

Tuy nhiên, tôi nhận được một thông báo lỗi gần ràng buộc mặc định là,

'Cú pháp không chính xác gần' cho ''


Bạn có thể muốn xem tài liệu chính thức của Microsoft SQL Server cho CREATE TABLE ...câu lệnh. Bạn có một lỗi cú pháp rất cơ bản.
John aka hot2use

Câu trả lời:


20

Bạn có thể đặt tên cho ràng buộc nội tuyến:

CREATE TABLE tblTest(
  --
  --
  Gender int CONSTRAINT DF_tblTest_Gender DEFAULT 3,
  --
) ;

Như CREATE TABLEtrang msDN hiển thị:

DEFAULT

... Để duy trì khả năng tương thích với các phiên bản trước của SQL Server, tên ràng buộc có thể được gán cho a DEFAULT.

Trong cùng một trang, chúng ta có thể thấy rằng các tùy chọn chỉ dành cho <table_constraint>những PRIMARY KEY, FOREIGN KEYCHECKnhững hạn chế:

< 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 )   
}

Vì vậy, nếu bạn muốn thêm một ràng buộc mặc định (đặt tên hay không), cách duy nhất là bằng cách thực hiện nội tuyến hoặc bằng một ALTER TABLEcâu lệnh.


Tôi muốn đặt tên cho ràng buộc của mình, điều này sẽ không thể thực hiện được nếu tôi thực hiện nội tuyến. Có cách nào mà không sử dụng câu lệnh bảng nội tuyến hoặc thay đổi.
Dhruv Raj

4
@DhruvRaj - có thể như câu trả lời này cho thấy
Martin Smith

8

Nhận xét của bạn về hai câu trả lời khác cho rằng bạn không thể đặt tên cho một ràng buộc mặc định khi tạo nó "nội tuyến". Cả hai câu trả lời cho thấy, trên thực tế, bạn có thể cung cấp một tên cho ràng buộc khi tạo nó nội tuyến. Tôi sẽ thêm một ví dụ thứ ba, hiển thị kết quả.

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;

Điều này cho thấy tên của ràng buộc mặc định là 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;

Các kết quả:

nhập mô tả hình ảnh ở đây

Nhìn vào trình thám hiểm đối tượng trong SSMS cho thấy tên:

nhập mô tả hình ảnh ở đây


2

Bạn có thể sử dụng default valuetrên định nghĩa trường.

Create tblTest(
columns..
..
..
Gender int CONSTRAINT constraint_name DEFAULT 3,
..
..
..
)

Hoặc sử dụng ALTER TABLE:

ALTER TABLE tblTest
ADD CONSTRAINT constraint_name 
DEFAULT 3
FOR Gender

Tôi muốn đặt tên cho ràng buộc của mình, điều này sẽ không thể thực hiện được nếu tôi thực hiện nội tuyến. Có cách nào mà không sử dụng câu lệnh bảng nội tuyến hoặc thay đổi.
Dhruv Raj
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.