테이블을 만드는 동안 기본 제약 조건을 추가하는 방법은 무엇입니까? 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 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명령문 으로 수행하는 것 입니다.


제약 조건의 이름을 지정하고 싶습니다. 인라인으로 수행하면 불가능합니다. 인라인 또는 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.