[tsql] 테이블 생성시 기본 제약 선언

GUI를 사용하는 대신 코드를 작성하여 Microsoft SQL Server 2000에서 새 테이블을 만들고 있습니다. “수동 방식”으로 수행하는 방법을 배우려고합니다.

이것은 내가 실제로 사용하고있는 코드이며 잘 작동합니다.

CREATE TABLE "attachments"
(
    "attachment_id" INT NOT NULL,
    "load_date" SMALLDATETIME NOT NULL,
    "user" VARCHAR(25) NOT NULL,
    "file_name" VARCHAR(50) NOT NULL,
    CONSTRAINT "pk_attachments" PRIMARY KEY ("attachment_id"),
    CONSTRAINT "fk_users" FOREIGN KEY ("user") REFERENCES "users" ("user"),
    CONSTRAINT "ch_load_date" CHECK ("load_date" < GETDATE())
)

이 방법으로 이름을 정의 할 수 있기 때문에 기본 키, 외래 키 및 검사 제약 조건을 자체적으로 지정했습니다. 그렇지 않으면 인라인으로 선언하면 SQL Server가 임의의 이름을 생성하고 “좋아요”하지 않습니다.

기본 값 제약 조건을 선언하려고 할 때 문제가 발생했습니다. 인터넷의 정보와 Microsoft SLQ Server Management Studio가이를 생성하는 방법을 살펴보면 인라인 및 자체적으로 생성 될 수 있음을 이해했습니다.

"load_date" SMALLDATETIME NOT NULL DEFAULT GETDATE()

또는

CONSTRAINT "df_load_date" DEFAULT GETDATE() FOR "load_date"

인라인 메서드는 잘 작동하지만 일반적으로 constaint에 대한 임의의 이름을 생성하고 독립형 메서드는 오류를 발생시킵니다 Incorrect syntax near 'FOR'..

또한 테이블을 만든 다음 ALTER해당 명령이 작동합니다.

ALTER TABLE "attachments"
ADD CONSTRAINT "df_load_date" DEFAULT GETDATE() FOR "load_date"

참고로 실행하려는 전체 코드는 다음과 같습니다.

CREATE TABLE "attachments"
(
    "attachment_id" INT NOT NULL,
    "load_date" SMALLDATETIME NOT NULL,
    "user" VARCHAR(25) NOT NULL,
    "file_name" VARCHAR(50) NOT NULL,
    CONSTRAINT "pk_attachments" PRIMARY KEY ("attachment_id"),
    CONSTRAINT "fk_users" FOREIGN KEY ("user") REFERENCES "users" ("user"),
    CONSTRAINT "ch_load_date" CHECK ("load_date" < GETDATE()),
    CONSTRAINT "df_load_date" DEFAULT GETDATE() FOR "load_date"
)

나는 여기서 완전히 헤매고있다. 내가하려는 것이 불가능한가, 아니면 내가 뭔가 잘못하고 있는가?

편집하다:

David M은 인라인 구문을 사용하여 명명 된 기본 제약 조건을 추가하는 방법을 보여 주었지만 독립형 구문이 완전히 잘못되었는지 아니면 내 잘못인지 이해하려고합니다.



답변

열 생성과 함께 인라인으로 수행하십시오.

[load_date] SMALLDATETIME NOT NULL
        CONSTRAINT [df_load_date] DEFAULT GETDATE()

많은 독자가 QUOTED_IDENTIFIERS기본적으로 작동하지 않으므로 따옴표 대신 대괄호를 사용 했습니다.


답변