Bagaimana cara menambahkan batasan Default saat membuat tabel? SQL Server [ditutup]

12

Saya mencoba membuat tabel baru dengan kolom diikuti oleh kendala mereka seperti yang ditunjukkan di bawah ini.

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

Namun, saya mendapatkan pesan kesalahan di dekat batasan default sebagai,

'Sintaksis salah dekat' untuk ''

Dhruv Raj
sumber
Anda mungkin ingin melihat dokumentasi resmi Microsoft SQL Server untuk CREATE TABLE ...pernyataan tersebut. Anda memiliki kesalahan sintaksis yang sangat mendasar.
John aka hot2use

Jawaban:

20

Anda dapat memberi nama batasan kendala:

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

Seperti yang CREATE TABLEditunjukkan halaman msdn:

DEFAULT

... Untuk menjaga kompatibilitas dengan versi SQL Server yang lebih lama, nama kendala dapat ditetapkan untuk a DEFAULT.

Di halaman yang sama, kita dapat menemukan bahwa satu-satunya opsi <table_constraint>adalah PRIMARY KEY, FOREIGN KEYdan CHECKkendala:

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

jadi jika Anda ingin menambahkan batasan default (penamaan atau tidak) satu-satunya cara adalah dengan melakukannya inline atau dengan ALTER TABLEpernyataan.

ypercubeᵀᴹ
sumber
Saya ingin menyebutkan kendala saya, yang tidak mungkin dilakukan jika saya melakukannya secara inline. Apakah ada cara tanpa menggunakan inline atau mengubah pernyataan tabel.
Dhruv Raj
4
@ DhruvRaj - dimungkinkan karena jawaban ini menunjukkan
Martin Smith
8

Komentar Anda pada dua jawaban lainnya mengklaim bahwa Anda tidak dapat menyebutkan batasan default saat membuatnya "sebaris". Kedua jawaban menunjukkan bahwa Anda dapat, pada kenyataannya, memberikan nama untuk kendala saat membuatnya sebaris. Saya akan menambahkan contoh ketiga, menunjukkan hasilnya.

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;

Ini menunjukkan nama batasan default adalah 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;

Hasil:

masukkan deskripsi gambar di sini

Melihat objek explorer di SSMS menunjukkan nama:

masukkan deskripsi gambar di sini

Max Vernon
sumber
2

Anda dapat menggunakan default valuedefinisi bidang.

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

Atau gunakan ALTER TABLE:

ALTER TABLE tblTest
ADD CONSTRAINT constraint_name 
DEFAULT 3
FOR Gender
McNets
sumber
Saya ingin menyebutkan kendala saya, yang tidak mungkin dilakukan jika saya melakukannya secara inline. Apakah ada cara tanpa menggunakan inline atau mengubah pernyataan tabel.
Dhruv Raj