Tablo oluştururken Varsayılan kısıtlama nasıl eklenir? SQL Server [kapalı]


12

Aşağıda gösterildiği gibi kısıtlamaları izleyen sütunlarla yeni bir tablo oluşturmaya çalışıyorum.

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

Ancak, varsayılan kısıtlamanın yakınında bir hata iletisi alıyorum,

'İçin' yanında yanlış sözdizimi


İfade için resmi Microsoft SQL Server belgelerine göz atmak isteyebilirsiniz CREATE TABLE .... Çok temel bir sözdizimi hatası var.
John aka hot2use

Yanıtlar:


20

Kısıtlamayı satır içi olarak adlandırabilirsiniz:

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

As CREATE TABLEmsdn sayfa gösterileri:

DEFAULT

... SQL Server'ın önceki sürümleriyle uyumluluğu korumak için, a'ya bir kısıtlama adı atanabilir DEFAULT.

Aynı sayfada, biz sadece seçenekler olduğunu bulabilirsiniz <table_constraint>vardır PRIMARY KEY, FOREIGN KEYve CHECKkısıtlamalar:

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

varsayılan bir kısıtlama (adlandırma veya adlandırma) eklemek istiyorsanız, tek yol bunu satır içi veya bir deyimle yapmaktır ALTER TABLE.


Kısıtlamamı adlandırmak istiyorum, eğer bunu yerinde yaparsam mümkün olmazdı. Satır içi veya değiştirme tablosu deyimini kullanmanın bir yolu var mı?
Dhruv Raj

4
@DhruvRaj - Bu yanıtın gösterdiği gibi mümkündür
Martin Smith

8

Diğer iki yanıt hakkındaki yorumlarınız, "satır içi" oluştururken varsayılan bir kısıtlamayı adlandıramayacağınızı iddia ediyor. Her iki cevap da, aslında, satır içinde oluştururken kısıtlama için bir ad verebileceğinizi gösterir. Sonuçları gösteren üçüncü bir örnek ekleyeceğim.

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;

Bu, varsayılan kısıtlamanın adını gösterir 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;

Sonuçlar:

resim açıklamasını buraya girin

SSMS'deki nesne gezginine bakıldığında adı gösterir:

resim açıklamasını buraya girin


2

default valueAlan tanımında kullanabilirsiniz .

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

Veya ALTER TABLE kullanın:

ALTER TABLE tblTest
ADD CONSTRAINT constraint_name 
DEFAULT 3
FOR Gender

Kısıtlamamı adlandırmak istiyorum, eğer bunu yerinde yaparsam mümkün olmazdı. Satır içi veya değiştirme tablosu deyimini kullanmanın bir yolu var mı?
Dhruv Raj
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.