테이블을 만드는 동안 기본 제약 조건을 추가하는 방법은 무엇입니까? SQL Server [폐쇄]


12

아래 표시된 것처럼 열과 제약 조건이있는 새 테이블을 만들려고합니다.

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

그러나 기본 제약 조건 근처에서 다음과 같은 오류 메시지가 나타납니다.

''for '근처에 잘못된 구문


CREATE TABLE ...명령문에 대한 공식 Microsoft SQL Server 문서를 살펴볼 수 있습니다 . 매우 기본적인 구문 오류가 있습니다.
John aka hot2use

답변:


20

구속 조건의 이름을 인라인으로 지정할 수 있습니다.

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

현상태대로 CREATE TABLEMSDN 페이지 쇼 :

DEFAULT

... 이전 버전의 SQL Server와의 호환성을 유지하기 위해 제약 조건 이름을에 할당 할 수 있습니다 DEFAULT.

같은 페이지에서, 우리는 유일한 옵션을 찾을 수 <table_constraint>있습니다 PRIMARY KEY, FOREIGN KEYCHECK제약 조건 :

< 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명령문 으로 수행하는 것 입니다.


제약 조건의 이름을 지정하고 싶습니다. 인라인으로 수행하면 불가능합니다. 인라인 또는 alter table 문을 사용하지 않는 방법이 있습니까?
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;

결과 :

여기에 이미지 설명을 입력하십시오

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

제약 조건의 이름을 지정하고 싶습니다. 인라인으로 수행하면 불가능합니다. 인라인 또는 alter table 문을 사용하지 않는 방법이 있습니까?
Dhruv Raj
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.